@sunbird-cb/toc 0.35.5 → 0.35.6

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.
@@ -473,6 +473,23 @@ export class AppTocCiosHomeComponent {
473
473
  });
474
474
  }
475
475
  }
476
+ showBadgeIcon() {
477
+ const badgeDetails = this.extContentReadData?.badgeDetails_v1;
478
+ if (!badgeDetails || !badgeDetails.length) {
479
+ return false;
480
+ }
481
+ const badge = badgeDetails[0];
482
+ // If badgeEarningDateEnabled is false, don't show badge
483
+ if (!badge.badgeEarningDateEnabled) {
484
+ return true;
485
+ }
486
+ // If badgeEarningDateEnabled is true, show badge only if badgeEarningDateTime has passed
487
+ if (badge?.badgeEarningDateEnabled && badge?.badgeEarningDateTime) {
488
+ console.log(badge.badgeEarningDateTime, Date.now());
489
+ return badge.badgeEarningDateTime > Date.now();
490
+ }
491
+ return false;
492
+ }
476
493
  get showEnroll() {
477
494
  return Object.keys(this.userExtCourseEnroll).length === 0 &&
478
495
  !this.enrollValidationLoading &&
@@ -485,11 +502,11 @@ export class AppTocCiosHomeComponent {
485
502
  _.get(this.extContentReadData, 'contentPartner.isActive', false);
486
503
  }
487
504
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.CommonMethodsService }, { token: i3.TranslateService }, { token: i4.ConfigurationsService }, { token: i4.EventService }, { token: i4.MultilingualTranslationsService }, { token: i4.WidgetContentService }, { token: i5.CertificateService }, { token: i6.LoaderService }, { token: i7.MatDialog }, { token: i8.MatLegacySnackBar }, { token: i9.NetCoreService }, { token: 'environment', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
488
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCiosHomeComponent, selector: "ws-app-app-toc-cios-home", host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "rcElement", first: true, predicate: ["rightContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}</div>\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatLegacyTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.MatLegacyTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "directive", type: i12.MatLegacyTabContent, selector: "[matTabContent]" }, { kind: "component", type: i13.SkeletonLoaderComponent, selector: "ws-widget-skeleton-loader", inputs: ["bindingClass", "height", "width"] }, { kind: "component", type: i14.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate", "fromMDO"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i15.ShareTocComponent, selector: "ws-app-share-toc", inputs: ["rootOrgId", "content", "contentLink", "baseContentReadData"], outputs: ["resetEnableShare"] }, { kind: "component", type: i16.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i17.SlidersDynamicComponent, selector: "ws-widget-sliders-dynamic", inputs: ["widgetData", "baseContentReadData"] }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i10.DatePipe, name: "date" }, { kind: "pipe", type: i4.PipeDurationTransformPipe, name: "pipeDurationTransform" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
505
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocCiosHomeComponent, selector: "ws-app-app-toc-cios-home", host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "rcElement", first: true, predicate: ["rightContainer"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n \n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}\n <!-- <div class=\"knowledge-level-container badgediv\"> -->\n <span *ngIf=\"showBadgeIcon()\" class=\"custom-badge\">\n <img class=\"badge-img w-5 h-5\" src=\"{{ extContentReadData?.badgeDetails_v1?.[0]?.badgeTemplate | pipePublicURL }}\" alt=\"\" srcset=\"\">\n </span>\n <!-- </div> -->\n </div>\n \n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatLegacyTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.MatLegacyTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "directive", type: i12.MatLegacyTabContent, selector: "[matTabContent]" }, { kind: "component", type: i13.SkeletonLoaderComponent, selector: "ws-widget-skeleton-loader", inputs: ["bindingClass", "height", "width"] }, { kind: "component", type: i14.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate", "fromMDO"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i15.ShareTocComponent, selector: "ws-app-share-toc", inputs: ["rootOrgId", "content", "contentLink", "baseContentReadData"], outputs: ["resetEnableShare"] }, { kind: "component", type: i16.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i17.SlidersDynamicComponent, selector: "ws-widget-sliders-dynamic", inputs: ["widgetData", "baseContentReadData"] }, { kind: "pipe", type: i10.JsonPipe, name: "json" }, { kind: "pipe", type: i10.DatePipe, name: "date" }, { kind: "pipe", type: i4.PipeDurationTransformPipe, name: "pipeDurationTransform" }, { kind: "pipe", type: i4.PipePublicURL, name: "pipePublicURL" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
489
506
  }
490
507
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocCiosHomeComponent, decorators: [{
491
508
  type: Component,
492
- args: [{ selector: 'ws-app-app-toc-cios-home', template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}</div>\n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"] }]
509
+ args: [{ selector: 'ws-app-app-toc-cios-home', template: "<ng-container *ngIf=\"extContentAvailable\">\n <div class=\"toc-banner\">\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"banner-details toc-content\" #bannerDetails>\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-4\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'140px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex flex-row gap-2\">\n <div class=\"flex flex-row tag-div rounded-2xl gap-1 items-center p-2\">\n <mat-icon class=\"ws-mat-orange-text\">video_library</mat-icon>\n <ng-container *ngIf=\"content?.courseCategory\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ translateLabel(content?.courseCategory, 'searchfilters') }}</div>\n </ng-container>\n <ng-container *ngIf=\"extContentReadData?.topic\">\n <div class=\"text-xs font-bold text-white leading-3\">{{ 'External Course' }}</div>\n </ng-container>\n </div>\n </div> -->\n </ng-container>\n\n <div class=\"flex items-center text-white mob-share\">\n <mat-icon (click)=\"onClickOfShare()\">share</mat-icon>\n </div>\n </div>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- Knowledge level block -->\n <div *ngIf=\"extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel\"\n class=\"knowledge-level-container\">\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'beginner' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'beginner'\"\n class=\"level-badge beginner\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#DBF4DC\" />\n <path\n d=\"M7.42267 5C7.67927 4.55555 8.32077 4.55556 8.57737 5L12.0415 11C12.2981 11.4444 11.9773 12 11.4641 12H4.53592C4.02272 12 3.70197 11.4444 3.95857 11L7.42267 5Z\"\n fill=\"#49C951\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'intermediate' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'intermediate'\"\n class=\"level-badge intermediate\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <rect width=\"16\" height=\"16\" fill=\"#D1DBEC\" />\n <path\n d=\"M7.42267 2.66666C7.67927 2.22221 8.32077 2.22221 8.57737 2.66666L12.0415 8.66666C12.2981 9.1111 11.9773 9.66666 11.4641 9.66666H4.53592C4.02272 9.66666 3.70197 9.1111 3.95857 8.66666L7.42267 2.66666Z\"\n fill=\"#1B4CA1\" />\n <path\n d=\"M7.42267 5.66666C7.67927 5.22221 8.32077 5.22221 8.57737 5.66666L12.0415 11.6667C12.2981 12.1111 11.9773 12.6667 11.4641 12.6667H4.53592C4.02272 12.6667 3.70197 12.1111 3.95857 11.6667L7.42267 5.66666Z\"\n fill=\"#1B4CA1\" stroke=\"#D1DBEC\" stroke-width=\"0.5\" />\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n <span\n *ngIf=\"extContentReadData?.difficultyLevel?.toLowerCase() === 'advanced' || extContentReadData?.knowledgeLevel?.toLowerCase() === 'advanced'\"\n class=\"level-badge advanced\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"none\">\n <g clip-path=\"url(#clip0)\">\n <rect width=\"16\" height=\"16\" fill=\"#FFE6E1\" />\n <path\n d=\"M7.42264 2.33334C7.67924 1.8889 8.32074 1.8889 8.57734 2.33334L12.0414 8.33334C12.298 8.77779 11.9773 9.33334 11.4641 9.33334H4.53589C4.02269 9.33334 3.70194 8.77779 3.95854 8.33334L7.42264 2.33334Z\"\n fill=\"#FF8268\" />\n <path\n d=\"M7.42264 5C7.67924 4.55555 8.32074 4.55556 8.57734 5L12.0414 11C12.298 11.4444 11.9773 12 11.4641 12H4.53589C4.02269 12 3.70194 11.4444 3.95854 11L7.42264 5Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n <path\n d=\"M7.42264 7.66669C7.67924 7.22224 8.32074 7.22224 8.57734 7.66669L12.0414 13.6667C12.298 14.1111 11.9773 14.6667 11.4641 14.6667H4.53589C4.02269 14.6667 3.70194 14.1111 3.95854 13.6667L7.42264 7.66669Z\"\n fill=\"#FF8268\" stroke=\"#FFE6E1\" stroke-width=\"0.5\" />\n </g>\n <defs>\n <clipPath id=\"clip0\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n {{extContentReadData?.difficultyLevel || extContentReadData?.knowledgeLevel}}\n </span>\n </div>\n \n </ng-container>\n <div class=\"flex flex-col gap-2\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'90%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'70%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"banner-text text-base sm:text-4xl leading-6 sm:leading-10 font-bold\">{{\n handleCapitalize(extContentReadData?.name) }}\n <!-- <div class=\"knowledge-level-container badgediv\"> -->\n <span *ngIf=\"showBadgeIcon()\" class=\"custom-badge\">\n <img class=\"badge-img w-5 h-5\" src=\"{{ extContentReadData?.badgeDetails_v1?.[0]?.badgeTemplate | pipePublicURL }}\" alt=\"\" srcset=\"\">\n </span>\n <!-- </div> -->\n </div>\n \n <div class=\"text-sm sm:text-base source-text font-semibold break-words\" #contentSource\n [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">\n <span *ngIf=\"extContentReadData?.courseProvider?.length;else contentPartnerName\">\n {{ formatcourseProviders(extContentReadData?.courseProvider) }}\n </span>\n <ng-template #contentPartnerName>\n {{extContentReadData?.contentPartner?.contentPartnerName }}\n </ng-template>\n </span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{\n 'common.karmayogiBharat' | translate }}</span>\n </div>\n </ng-container>\n </div>\n\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'120px'\" [height]=\"'40px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'88px'\" [height]=\"'24px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <!-- <div class=\"flex gap-4 items-center\" *ngIf=\"content?.averageRating || content?.additionalTags?.length\">\n <div class=\"flex flex-row rating-chip py-2 items-center cursor-pointer\" (click)=\"handleNavigateToReviews()\" *ngIf=\"content?.averageRating\">\n <div class=\"flex flex-row gap-1 margin-left-s items-center\">\n <mat-icon>grade</mat-icon>\n <div class=\"text-white text-sm leading-4\">{{ content?.averageRating }}</div>\n </div>\n <div class=\"separator\"></div>\n <div class=\"text-white text-sm leading-4 margin-right-m\">{{ content?.totalRating | pipeCountTransform }}</div>\n </div>\n <div class=\"flex items-center\" *ngIf=\"content?.additionalTags?.length\">\n <div class=\"most-enrolled-chip text-xs leading-3\">\n <span *ngIf=\"content?.additionalTags?.includes('mostTrending')\">{{ 'cardcontentv2.mostTrending' | translate }}</span>\n <span *ngIf=\"content?.additionalTags?.includes('mostEnrolled')\">{{ 'cardcontentv2.mostEnrolled' | translate }}</span>\n </div>\n </div>\n </div> -->\n </ng-container>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'180px'\" [height]=\"'20px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader && extContentReadData?.lastUpdatedOn\">\n <div class=\"text-xs leading-4 source-text\">({{ 'apptoc.lastUpdatedOn' | translate }} {{\n extContentReadData?.lastUpdatedOn | date: 'MMM d, y' }})</div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!forPreview\">\n\n <div *ngIf=\"isMobile\">\n <div class=\"flex flex-col gap-4 p-5 border-bottom position-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'132px'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded blue-2-loader'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\" (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n\n <div class=\"block md:hidden\">\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n </div>\n <div>\n <div class=\"flex flex-col px-8 py-4 gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">{{ extContentReadData?.duration * 60 | pipeDurationTransform: 'hms' }}</div>\n </div>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row gap-6 fixed-width\">\n <div class=\"toc-content\" [ngClass]=\"isMobile ? '':'mt-8 mb-8'\">\n <mat-tab-group>\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col\" [ngClass]=\"isMobile ? '':'mt-5 mb-5'\">\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'80px'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <div class=\"flex flex-col gap-2 mt-4\">\n <ws-widget-skeleton-loader [width]=\"'80%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'95%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n <ws-widget-skeleton-loader [width]=\"'65%'\" [height]=\"'16px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <ws-widget-app-toc-about [contentReadData]=\"extContentReadData\" [showReviews]=\"false\"\n [baseContentReadData]=\"extContentReadData\"\n [showMarketPlaceCertificate]=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0 && userExtCourseEnroll?.progress === 100\"\n [content]=\"extContentReadData\" [fromMarketPlace]=\"true\"\n [skeletonLoader]=\"skeletonLoader\"\n [fromMDO]=\"fromMDO\">\n </ws-widget-app-toc-about>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n\n <ng-container *ngIf=\"config?.commentsTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.comments' | translate }}\">\n <!-- <ng-template matTabContent> -->\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\" *ngIf=\"discussWidgetData\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n\n </div>\n <!-- </ng-template> -->\n </mat-tab>\n </ng-container>\n </mat-tab-group>\n\n </div>\n <div class=\"right-container\">\n <div class=\"right-content\" #rightContainer>\n <ng-container *ngIf=\"skeletonLoader\">\n <ws-widget-skeleton-loader [width]=\"'384px'\" [height]=\"'224px'\"\n [bindingClass]=\"'rounded'\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"!skeletonLoader\">\n <div class=\"flex flex-col image-div\"\n [ngStyle]=\"{\n 'background-image': 'url(' + extContentReadData?.appIcon + ')', 'background-repeat': 'no-repeat', 'background-size': 'cover'}\"\n [ngClass]=\"{'image-backdrop': scrolled}\">\n <div class=\"flex flex-col justify-between text-container\">\n <div class=\"flex items-center gap-4 justify-end\">\n <div (click)=\"onClickOfShare()\"\n class=\"flex flex-row items-center justify-end gap-2 share-tag\" *ngIf=\"!forPreview\">\n <mat-icon>share</mat-icon>\n <div>{{ 'apptocsinglepage.share' | translate }}</div>\n </div>\n </div>\n <div class=\"flex flex-col gap-1\" *ngIf=\"scrolled\">\n <div class=\"text-xl leading-6 text-white font-bold text-scrol-custom\">{{\n handleCapitalize(extContentReadData?.name) }}\n </div>\n <!-- <div class=\"text-sm source-text font-semibold break-words\" #contentSource [ngClass]=\"{'sourceEllipsis': sourceEllipsis}\" title=\"{{content?.source}}\">\n {{ 'cardcontentv2.by' | translate }}\n <span *ngIf=\"extContentReadData?.contentPartner?.contentPartnerName\">{{ extContentReadData?.contentPartner?.contentPartnerName }}</span>\n <span *ngIf=\"!extContentReadData?.contentPartner?.contentPartnerName\">{{ 'common.karmayogiBharat' | translate }}</span>\n </div> -->\n </div>\n </div>\n\n\n </div>\n\n\n </ng-container>\n\n <ng-container *ngIf=\"!forPreview\">\n <div class=\"flex flex-col gap-3 p-3 border-bottom\">\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}'\">\n <div class=\"flex flex-row justify-end w-full ws-mat-black-text\">\n <span class=\"mat-body-2 ws-mat-black-text\">\n {{userExtCourseEnroll?.progress}}%</span>\n </div>\n <ws-widget-content-progress [contentId]=\"userExtCourseEnroll?.progress\"\n [progress]=\"userExtCourseEnroll?.progress\"\n [progressType]=\"'percentage'\" [customClassName]=\"'viewer-progress'\">\n </ws-widget-content-progress>\n </ng-container> -->\n\n <ng-container *ngIf=\"showEnroll\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\"\n (click)=\"enRollToExtCourse(extContentReadData)\">\n <ng-container>{{ 'apptochome.enroll' | translate }}\n </ng-container>\n </button>\n </ng-container>\n <ng-container *ngIf=\"enrollValidationLoading\">\n <ws-widget-skeleton-loader [width]=\"'100%'\" [height]=\"'32px'\"\n [bindingClass]=\"'rounded '\"></ws-widget-skeleton-loader>\n </ng-container>\n <ng-container *ngIf=\"showRedirect\">\n <a class=\"flex action-button justify-center flex-middle resume\" target=\"_blank\"\n [href]=\"extContentReadData?.redirectUrl\"\n (click)=\"captureRedirectTelemetry(extContentReadData)\">\n <ng-container>{{ 'apptochome.redirect' | translate }}\n <mat-icon class=\"ml-2 ws-mat-white-text\">open_in_new</mat-icon>\n </ng-container>\n </a>\n </ng-container>\n <!-- <ng-container *ngIf=\"(userExtCourseEnroll | json) !== '{}' && userExtCourseEnroll?.issued_certificates?.length > 0\n && userExtCourseEnroll?.progress === 100\">\n <button class=\"flex action-button justify-center flex-middle resume\" type=\"button\" (click)=\"downloadCert()\">\n <img src=\"fusion-assets/images/certificate-ico.svg\" width=\"24\" height=\"24\">\n <span>Certificate</span>\n <mat-icon *ngIf=\"!downloadCertificateLoading\" class=\"ml-2\">arrow_downward</mat-icon>\n <div class=\"center flex flex-middle certificate-loader margin-left-s\" *ngIf=\"downloadCertificateLoading\">\n <mat-spinner strokeWidth=\"2\" stroke=\"'white'\" class=\"white-spinner\" [diameter]=\"24\"></mat-spinner>\n </div>\n </button>\n </ng-container> -->\n </div>\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"inProgressInfo\" ></ng-container>\n <div>\n <div class=\"flex flex-col kpi-values items-center gap-2\" *ngIf=\"extContentReadData?.duration > 0\">\n <img src=\"/assets/icons/toc/timer.svg\" width=\"20px\" alt=\"web image\" />\n <div class=\"text-xs\">\n {{ extContentReadData?.duration | pipeDurationTransform: 'hms' }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<div *ngIf=\"!extContentAvailable\">\n <div class=\"flex justify-center w-full\">\n <div class=\"margin-xl text-center\">\n <img src=\"/assets/common/error-pages/empty_search.svg\" wsUtilsImageResponsive alt=\"No results\"\n class=\"margin-top-l margin-bottom-s\">\n <h2 class=\"mat-h2\" i18n=\"search route no result\">{{'learnsearch.noResults' | translate}}</h2>\n </div>\n </div>\n\n</div>\n\n<ws-app-share-toc *ngIf=\"enableShare\" [contentLink]=\"contentLink\" [rootOrgId]=\"rootOrgId\" [content]=\"extContentReadData\"\n (resetEnableShare)=\"resetEnableShare($event)\"></ws-app-share-toc>\n\n<ng-template #inProgressInfo>\n <ng-container *ngIf=\"showProviderTips\">\n <div class=\"no-certificate-found mt-6 mb-4 mx-2 p-2\" >\n <ws-widget-sliders-dynamic [widgetData]=\"widgetData\"></ws-widget-sliders-dynamic>\n </div>\n </ng-container>\n</ng-template>", styles: [".source-text{color:#ffffffb3}.toc-banner{background:#3a83cf;background:linear-gradient(135deg,#3a83cf,#1b4ca1);width:100%}.toc-banner .fixed-width{padding:0 16px}.toc-banner .banner-details{padding:36px 0}.toc-banner .banner-details .due-tag{padding:4px;color:#fff;border-radius:4px}.toc-banner .banner-details .due-warning{background-color:#ff9800;border:1px solid #FF9800}.toc-banner .banner-details .due-overdue{background-color:#f44336;border:1px solid #F44336}.toc-banner .banner-details .due-success{background-color:#4caf50;border:1px solid #4CAF50}.toc-banner .banner-details .rating-chip{border:1px solid rgba(0,0,0,.6);border-radius:20px;background-color:#0009}.toc-banner .banner-details .rating-chip mat-icon{width:16px;height:16px;color:#ff9800;font-size:16px}.toc-banner .banner-details .rating-chip .separator{width:1px;height:20px;border-right:1px solid rgba(255,255,255,.16);margin:0 8px}.toc-banner .banner-details .banner-text{color:#fffffff2;word-wrap:break-word}.toc-banner .info-div{max-width:384px;width:100%}.toc-banner .most-enrolled-chip{background-color:#ffea9e;border:1px solid #FFEA9E;padding:4px;border-radius:2px}.text-info-div{padding:8px;background-color:#fff;border-radius:64px}.tag-div{border:1px solid #FF9800;background-color:#00000080}.tag-div mat-icon{font-size:12px;width:12px;height:12px}.fixed-width{max-width:1200px;display:block;margin:0 auto}.mat-subheading-1{margin-bottom:4px!important}.initial-circle{width:36px;height:36px;border-radius:50%;background:#1b2133;color:#fff;text-transform:uppercase}.toc-content{max-width:792px;width:100%}.right-container .image-div{height:220px;background-color:#ccc;border-top-left-radius:12px;border-top-right-radius:12px}.right-container .image-div img{max-width:384px;width:100%;height:220px;border-top-left-radius:12px;border-top-right-radius:12px;position:relative;top:-42px}.right-container .image-div .share-container{position:relative;z-index:2;top:20px;margin-right:20px}.right-container .image-div .share-tag{font-weight:700;background-color:#000;border:1px solid #FFF;border-radius:20px;padding:6px 16px;color:#fff;cursor:pointer}.right-container .tag-div mat-icon{width:16px;height:16px;font-size:16px}.right-container .share-tag mat-icon{width:20px;height:20px;font-size:20px}.right-container .text-container{position:relative;z-index:2;height:220px;padding:16px}.right-container .right-content{background-color:#fff;border-radius:12px;position:fixed;z-index:10;top:132px;width:384px;margin-bottom:2rem;box-shadow:0 2px 6px -1px #00000080,0 -4px 4px -2px #00000080}.right-container .border-bottom{border-bottom:1px solid rgba(0,0,0,.2)}.right-container .info-div{background-color:#fef7ed;border:none;border-radius:8px;padding:8px 12px;font-size:14px}.right-container .info-div .mat-icon{width:18px;height:18px;font-size:18px}.right-container .kpi-values{width:64px;padding:8px;text-align:center}.right-container .kpi-values .timer-icon{color:#000000de;height:20px}.batch-info{padding:16px;border-radius:4px;background-color:#1b4ca114;border:1px solid rgba(27,76,161,.08);text-align:center}.batch-info .batch-label{font-size:.75rem;color:#0009;line-height:1rem}.button{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}@media screen and (max-width: 1200px){.right-container{display:none}.action-button:before{content:\"\";position:absolute;inset:-10px;background-color:#ffffff40;border-radius:inherit;filter:blur(10px);z-index:-1}.action-button:after{content:\"\";position:absolute;inset:-10px;box-shadow:0 0 -4px -4px #fff9;border-radius:inherit;z-index:-1}.karma-points-div{display:none}}.enroll-modal{max-width:600px!important;width:100%!important}.enroll-modal .mat-dialog-container{padding:0;border-radius:12px}.confirmation-modal{max-width:420px!important;width:100%!important}.confirmation-modal .mat-dialog-container{border-radius:12px;padding:0}.image-backdrop{background-color:#000!important;position:relative}.image-backdrop:after{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);content:\"\";display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:#000000a6;border-top-left-radius:12px;border-top-right-radius:12px}.text-scrol-custom{height:200px;overflow-y:auto}@media screen and (max-width: 1000px){.confirmation-modal,.enroll-modal{max-width:90vw!important}}.kpi-loader-div{width:18%}a.action-button{color:#fff!important;width:auto}.rate-button{color:#000000de!important;font-size:.875rem;font-weight:700;border:none!important}.rate-button .mat-button-wrapper{display:flex;gap:8px;align-items:center}.mobile-enroll-div{padding:16px;position:fixed;z-index:1000;bottom:0;width:calc(100% - 32px)}.mobile-enroll-div .action-button{min-width:320px;max-width:400px;margin:auto}@media screen and (min-width: 1201px){.mobile-enroll-div,.mob-share{display:none!important}.hideAbove1200{display:none}}.mobile-progress{padding:16px}@media screen and (min-width: 1200px){.mobile-progress{display:none}}.sourceEllipsis{white-space:break-spaces;position:relative;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.text-white{color:#fff!important}.custom-button,.fluid-width{width:100%}.toc-container{background:#fff;width:100%}mat-divider{border-top-color:#d9d9d9}.sticky{top:56px;overflow:hidden;z-index:10;width:100%}.statusMsg{border-radius:4px;height:40px}.toc-body{padding-bottom:1rem}.toc-body .toc-links{width:100%;z-index:1;border:none;background:transparent}.toc-body .toc-links .mat-tab-link{text-align:left;justify-content:flex-start}.toc-body .toc-links .mat-tab-link.justify-center{justify-content:center}.toc-body .toc-links .mat-tab-link.link-active{color:#0074b6!important}.tab:focus{outline:1px solid!important}.rounded-icon{background:#fff 0% 0% no-repeat padding-box;box-shadow:0 2px 4px #00000029;border:2px solid #00A9F4;border-radius:50%;min-width:0;opacity:1;height:35px;width:35px;padding:0;align-items:center;align-self:center;float:right}.rounded-icon mat-icon{color:#00a9f4}.blue-border{border:2px solid #0074b6!important}.hidden-xs-inline{display:inline}@media only screen and (max-width: 599px){.hidden-xs-inline{display:none}}.visible-xs-inline{display:none}@media only screen and (max-width: 599px){.visible-xs-inline{display:inline}}.meta-section{flex:1;min-width:1px}.meta-section .unit-meta-item{border-radius:2px;box-sizing:border-box;margin-bottom:16px;box-shadow:none;padding-left:0}@media only screen and (max-width: 599px){.meta-section{width:100%}}.font-bold-imp{font-weight:700!important}.info-section{width:20%;min-width:250px}.info-section .custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}@media only screen and (max-width: 599px){.info-section{width:100%;margin-left:0!important}}.info-section .glance-container .at-glance-heading{letter-spacing:0px;color:#222}.info-section .glance-container .info-item .cs-icons .mat-icon{color:#666;vertical-align:middle;font-size:20px}.info-section .glance-container .info-item .cs-icons img{width:20px;height:20px;vertical-align:middle}.info-section .glance-container .info-item .item-heading{font:600 14px/21px Lato;margin:0 0 4px;letter-spacing:0px;color:#0074b6!important}.info-section .glance-container .info-item .item-value{letter-spacing:0px;color:#5f5f5f}.info-section .glance-container .info-item .item-icon{width:20px;height:20px;font-size:20px;margin-left:8px}.toc-discussion-container{display:flex;justify-content:space-between;flex-wrap:wrap-reverse}.toc-discussion-container .discussion{flex:1;min-width:1px}.toc-discussion-container .cohorts{width:100%;background:#fff 0% 0% no-repeat padding-box;border:1px solid #D9D9D9;border-radius:8px;box-shadow:none}@media only screen and (min-width: 600px) and (max-width: 959px){.toc-discussion-container .cohorts{margin-left:24px;min-width:250px}}@media only screen and (max-width: 599px){.toc-discussion-container .cohorts{margin-left:0;margin-bottom:24px;width:100%}}.mtb-xl{margin-top:3.5rem;margin-bottom:3.5rem}.detailBar{display:flex}.editDetails{margin:auto;display:flex}.white-bg{background:#fff!important;background-color:#fff!important}.contacts-container{padding:22px 0 10px;border:0;border-top:1px;border-style:solid;border-bottom:1px;border-color:#ececec}.contacts-container .contacts-head{letter-spacing:0px;color:#222;background:transparent;margin-bottom:24px}.contacts-container .author-card{min-width:291px;width:291px;display:flex;flex-direction:row;align-items:center;margin-bottom:30px;padding-right:10px}.contacts-container .author-card .right{padding:0 15px}.contacts-container .author-card .user-name{letter-spacing:0px;color:#5f5f5f}.contacts-container .author-card .user-university{letter-spacing:0px;color:#00a9f4}.contacts-container .author-card .user-button{background:#fff 0% 0% no-repeat padding-box;border:1px solid #F58634;border-radius:15px;letter-spacing:0px;color:#f58634;max-width:60px;padding:4px}.divider-transparent{border-top-color:transparent!important}.scroll-to-top{position:fixed;bottom:15px;right:15px;opacity:0;transition:all .2s ease-in-out;border-radius:50%}.scroll-to-top .icon{font-size:24px!important}.show-scroll{opacity:1;transition:all .2s ease-in-out}.sticky-breadcrumbs{position:sticky;z-index:999;top:72px;width:100%}.sticky-banner{position:sticky;z-index:999}.sticky-navs{position:sticky!important;background:#fff;z-index:999;top:auto}.actbutton{border:1px solid rgba(0,0,0,.16);border-radius:4px;padding:0 15px;width:100%;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}.actbutton .mat-icon{margin-right:6px}.disable-start-btn{cursor:not-allowed!important;pointer-events:none!important;opacity:.5!important}.certificate-loader ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#fff}.cb-plan-wrap{opacity:1;color:#1b4ca1;font-family:Lato-Regular;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.cb-plan-wrap .cb-danger{border-radius:2px;padding:4px 8px;border:1px solid #d13924;background-color:#d13924!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-success{padding:4px 8px;border-radius:2px;border:1px solid #1d8922;background-color:#1d8922!important;color:#fff!important;opacity:1}.cb-plan-wrap .cb-warning{padding:4px 8px;border-radius:2px;border:1px solid #ef951e;background-color:#ef951e!important;color:#fff!important;opacity:1}.bg-white{background-color:#fff}.provider-logo-div{border-radius:4px;box-shadow:0 2px 1px -1px #0003,0 1px 1px #00000024,0 1px 3px #0000001f}.provider-logo-div img{display:flex;border-radius:4px;width:40px;height:40px;padding:4px}ul{padding:0!important}.kpi-values{min-width:64px;padding:8px;text-align:center}.kpi-values img{height:24px;width:24px}.position-bottom{position:fixed;width:88%;bottom:0;z-index:99}.no-certificate-found{border:1px solid #ccc;border-color:#f3962f;background-color:#fceedb;border-radius:12px}.no-certificate-found{min-height:56px}.no-certificate-found ::ng-deep ws-widget-sliders-dynamic .banner-data{font-size:16px!important;font-family:lato,sans-serif!important}.truncate-5{-webkit-line-clamp:1;text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;word-wrap:break-word}.ext-info-slider{padding:8px}#commentsDiv{margin:1rem auto;min-height:500px}.knowledge-level-container{margin-right:auto}.level-badge{display:inline-flex;height:24px;padding:2px 8px;align-items:center;gap:4px;flex-shrink:0;border-radius:12px;font-weight:600;font-size:12px;line-height:16px;white-space:nowrap}.level-badge.beginner{border:1px solid #49C951;background:linear-gradient(0deg,#49c95133 0% 100%),#fff;color:#2f8132;border-radius:16px}.level-badge.intermediate{border:1px solid #1B4CA1;background:linear-gradient(0deg,#1b4ca133 0% 100%),#fff;color:#1b4ca1;border-radius:16px}.level-badge.advanced{border:1px solid #FF8268;background:linear-gradient(0deg,#ff826833 0% 100%),#fff;color:#ff4b25;border-radius:16px}.level-badge svg{flex-shrink:0}::ng-deep .consent-dialog-panel .mat-dialog-container{overflow:hidden;padding:0;margin:0;border-radius:8px}::ng-deep .consent-dialog-panel .mat-dialog-content{padding:0;margin:0;max-height:none;overflow:hidden}\n"] }]
493
510
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.CommonMethodsService }, { type: i3.TranslateService }, { type: i4.ConfigurationsService }, { type: i4.EventService }, { type: i4.MultilingualTranslationsService }, { type: i4.WidgetContentService }, { type: i5.CertificateService }, { type: i6.LoaderService }, { type: i7.MatDialog }, { type: i8.MatLegacySnackBar }, { type: i9.NetCoreService }, { type: undefined, decorators: [{
494
511
  type: Inject,
495
512
  args: ['environment']
@@ -502,4 +519,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
502
519
  type: HostListener,
503
520
  args: ['window:scroll', ['$event']]
504
521
  }] } });
505
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSXZILE9BQU8sRUFBOEYsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFNM0ksT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPbkUsTUFBTSxPQUFPLHVCQUF1QjtJQTRCbEMsWUFBWTtRQUVWLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO2FBQ3ZEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2FBQ3REO1NBQ0Y7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1NBQ3RCO0lBQ0gsQ0FBQztJQUNELFlBQW9CLEtBQXFCLEVBQy9CLFNBQStCLEVBQy9CLFNBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLE1BQW9CLEVBQ3BCLGdCQUFpRCxFQUNqRCxVQUFnQyxFQUNoQyxPQUEyQixFQUM1QixNQUFxQixFQUNwQixTQUFvQixFQUNyQixRQUFxQixFQUNyQixjQUE4QixFQUNNLFdBQWdCO1FBWnpDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBQy9CLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGNBQVMsR0FBVCxTQUFTLENBQXVCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQztRQUNqRCxlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3BCLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDTSxnQkFBVyxHQUFYLFdBQVcsQ0FBSztRQXhEN0QsY0FBUyxHQUFZLEVBQUUsQ0FBQTtRQUN2QixtQkFBYyxHQUFHLElBQUksQ0FBQTtRQUNyQix1QkFBa0IsR0FBUSxFQUFFLENBQUE7UUFDNUIsd0JBQW1CLEdBQVEsRUFBRSxDQUFBO1FBQzdCLCtCQUEwQixHQUFHLEtBQUssQ0FBQTtRQUNsQyxlQUFVLEdBQVEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzlHLHdCQUFtQixHQUFHLElBQUksQ0FBQTtRQUMxQixjQUFTLEdBQUcsS0FBSyxDQUFBO1FBQ2pCLDRCQUF1QixHQUFHLElBQUksQ0FBQTtRQUM5QixXQUFNLEdBQUc7WUFDUCxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsRUFBRSxDQUFDO1NBQ2IsQ0FBQTtRQUNELGdCQUFXLEdBQVEsRUFBRSxDQUFBO1FBSXJCLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFHaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFFbkIsZ0JBQVcsR0FBUSxJQUFJLENBQUE7UUFFdkIscUJBQWdCLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLFlBQU8sR0FBRyxLQUFLLENBQUE7UUFpQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQTtZQUNwQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtnQkFDdEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLEdBQUc7b0JBQzFDLElBQUksRUFBRSxFQUFFO2lCQUNULENBQUE7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7YUFFNUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQTtnQkFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUE7YUFDNUI7WUFFRCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU07Z0JBQ3JHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUMxRDtnQkFDQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7Z0JBQzdELElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixLQUFLLEdBQUcsRUFBRTtvQkFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFBO29CQUUvQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7b0JBQ25CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQTtpQkFDOUM7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQTthQUNyQztRQUVILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFFLENBQUE7WUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQ3JDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUM3RCxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFFLENBQUE7b0JBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtpQkFDckM7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQTtTQUN0RDtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUV0RixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMzRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsMkJBQTJCO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDL0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUNwRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtTQUM3QjtRQUNELElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLDRNQUE0TSxFQUFFLEdBQUcsRUFBRTtnQkFDcE8sUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFBO1NBQ0g7YUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGlOQUFpTixFQUFFLEdBQUcsRUFBRTtnQkFDek8sUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtZQUNoRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQTtZQUN0RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFBO2dCQUNyRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRTtvQkFDNUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQTtpQkFDaEk7YUFDRjtZQUNELElBQUksQ0FBQyxVQUFVLEdBQUc7Z0JBQ2hCLEdBQUcsSUFBSSxDQUFDLE1BQU07Z0JBQ2QsSUFBSSxFQUFFLE1BQU07Z0JBQ1osU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0IsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsVUFBVSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLDZCQUE2QixFQUFFLEVBQUUsQ0FBQzthQUM5RSxDQUFBO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7Z0JBQzdFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztvQkFDbkQsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxLQUFLLENBQUM7d0JBQzVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUU3QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTtnQkFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUE7YUFDdkY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUE7Z0JBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLDRCQUE0QixDQUFBO2FBQy9GO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtTQUN2RDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsSUFBYTtRQUN6QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDdEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQTtZQUMxRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUE7U0FDL0Q7SUFDSCxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsV0FBZ0I7UUFDaEMsTUFBTSxRQUFRLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUE7UUFDbEQsTUFBTSxNQUFNLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwRixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFDRCxXQUFXLENBQUMsR0FBUSxFQUFFLFVBQWU7UUFDbkMsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBZ0I7UUFDcEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxFQUFFLENBQUE7U0FDVjtRQUNELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQVk7UUFDbEMsTUFBTSxVQUFVLEdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUN6SCxNQUFNLFlBQVksR0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUNqRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM1RCxLQUFLLEVBQUUsT0FBTztZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsU0FBUyxFQUFFLE1BQU07WUFDakIsU0FBUyxFQUFFLE9BQU87WUFDbEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLHNCQUFzQjtZQUNsQyxJQUFJLEVBQUU7Z0JBQ0osVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFlBQVksRUFBRSxZQUFZO2FBQzNCO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsc0JBQXNCO1FBQ3RCLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQyxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CLHdDQUF3QztnQkFDeEMsMkJBQTJCO2dCQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQzdCO2lCQUFNO2dCQUNMLGlCQUFpQjtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO29CQUMvRSxRQUFRLEVBQUUsSUFBSTtpQkFDZixDQUFDLENBQUE7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEIsTUFBTSxPQUFPLEdBQUc7WUFDZCxTQUFTLEVBQUU7Z0JBQ1QsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTO2dCQUMvQixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxJQUFJLEVBQUU7Z0JBQ3pELHNCQUFzQixFQUFFO29CQUN0QixXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7b0JBQ3ZCLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRTtvQkFDbEMsYUFBYSxFQUFFLG1EQUFtRDtpQkFDbkU7YUFDRjtTQUNGLENBQUE7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDckMsQ0FBQyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtnQkFDL0UsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDTyxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBWTtRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakMsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDM0IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUNyQyxDQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE9BQU8sTUFBTSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEgsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFBO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFBO1lBQ3RGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDNUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQzFDO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtnQkFDMUYsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFNBQWM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzdHLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQTtZQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDbEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFDckUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtTQUMzRDthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUE7U0FDekQ7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsT0FBWTtRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQTtRQUM5QixJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUNsRixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtJQUM5QixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE1BQU0sS0FBSyxHQUFHO1lBQ1osU0FBUyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUztZQUN6QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJO1lBQzVDLElBQUksRUFBRSxNQUFNO1lBQ1osRUFBRSxFQUFFLEVBQUU7WUFDTixJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDbkIsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsS0FBSyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUMzQyxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsTUFBTTthQUNiO1NBQ0YsQ0FBQTtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWxDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxTQUFjLEVBQUUsT0FBWSxFQUFFLEVBQU87UUFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDaEM7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLE9BQU87WUFDUCxFQUFFLEVBQUUsRUFBRTtTQUNQLEVBQ0Q7WUFDRSxFQUFFLEVBQUUsU0FBUztZQUNiLElBQUksRUFBRSxrQkFBa0I7U0FDekIsRUFDRDtZQUNFLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLEtBQUssR0FBRztZQUNaLFNBQVMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVM7WUFDekMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSTtZQUM1QyxJQUFJLEVBQUUsTUFBTTtZQUNaLEVBQUUsRUFBRSxFQUFFO1lBQ04sSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sRUFBRSxFQUFFO2dCQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsUUFBUTtnQkFDN0MsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLE1BQU07YUFDYjtTQUNGLENBQUE7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQTtRQUN0QyxNQUFNLE9BQU8sR0FBUSxNQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNsSSxJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JELElBQUksQ0FBQywwQkFBMEIsR0FBRyxLQUFLLENBQUE7WUFDdkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLE1BQU07bUJBQ2xHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLEdBQUc7b0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRO29CQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7aUJBQ25FLENBQUE7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFBO1NBQ3hDO0lBQ0gsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtRQUN2Qiw2Q0FBNkM7SUFDL0MsQ0FBQztJQUVELG9CQUFvQjtJQUNwQix5Q0FBeUM7SUFDekMsaUVBQWlFO0lBQ2pFLDJDQUEyQztJQUMzQyxTQUFTO0lBQ1Qsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQiwwREFBMEQ7SUFDMUQsVUFBVTtJQUNWLFNBQVM7SUFDVCwwREFBMEQ7SUFDMUQsaUVBQWlFO0lBQ2pFLFVBQVU7SUFDVixTQUFTO0lBQ1Qsc0NBQXNDO0lBQ3RDLHdEQUF3RDtJQUN4RCxTQUFTO0lBQ1QsU0FBUztJQUNULElBQUk7SUFFSixnQkFBZ0IsQ0FBQyxVQUFlO1FBRTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO0lBQzFCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxTQUFjO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUUsVUFBVTtlQUN4RixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVTtlQUNqRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsVUFBVTtlQUMvRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVU7ZUFDNUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVTtVQUN4RjtZQUNBLElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQTtZQUNyQiw0R0FBNEc7WUFDNUcsdUZBQXVGO1lBQ3ZGLElBQUk7WUFDSixrQ0FBa0M7WUFDbEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtnQkFDM0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUE7YUFDdkQ7WUFDRCwwRUFBMEU7WUFDMUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsaUJBQWlCLENBQUE7WUFDL0MsSUFBSTtZQUNKLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2pFLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFBO2FBQzNEO1lBQ0QsZ0VBQWdFO1lBQ2hFLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQTtZQUM3QyxJQUFJO1lBQ0osSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtnQkFDOUQsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUE7YUFDM0Q7WUFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFO2dCQUMvRCxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDOUo7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFBO2FBQ2hDO1lBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFDOUQ7Z0JBQ0EsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQTtnQkFDN0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQTthQUM5RDtZQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUU7Z0JBQ3RFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUE7YUFDcEU7WUFDRCxxREFBcUQ7WUFDckQsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1lBQzlGLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTtZQUM5RixJQUFJO1lBQ0osSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtnQkFDN0QsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQTthQUNsRTtpQkFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYztnQkFDMUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFDekQ7Z0JBQ0EsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQTthQUM3RjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQTthQUN0RDtZQUNELElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtnQkFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2FBQ3ZJO2lCQUFNLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtnQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUE7YUFDNUk7aUJBQU0sSUFBSSxTQUFTLEtBQUssWUFBWSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTthQUM3STtTQUVGO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFNO1FBQ2xCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDYixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQTtRQUM1QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDakMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBRWpDLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNqRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDckUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLE9BQU8sUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDdkMsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNqRSxPQUFPLGtCQUFrQixDQUFDLFNBQVMsQ0FBQTtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtJQUNyQixDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLHlFQUF5RTtRQUN6RSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFO1lBQzdNLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUE7WUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUNoSSxDQUFDLFNBQWMsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFBO2dCQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtZQUN2QixDQUFDLEVBQ0QsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksMkNBQTJDLEVBQUUsR0FBRyxFQUFFO29CQUNoRyxRQUFRLEVBQUUsS0FBSztpQkFDaEIsQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUE7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFBO1lBQ3hCLENBQUMsQ0FDRixDQUFBO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZELENBQUMsSUFBSSxDQUFDLHVCQUF1QjtZQUM3QixJQUFJLENBQUMsU0FBUztZQUNkLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDckQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO1lBQzdDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3BFLENBQUM7K0dBeGZVLHVCQUF1QiwrWkF5RHhCLGFBQWE7bUdBekRaLHVCQUF1QiwrT0NuQnBDLGs2ekJBeVhjOzs0RkR0V0QsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLDBCQUEwQjs7MEJBNkRqQyxNQUFNOzJCQUFDLGFBQWE7OzBCQUFHLFFBQVE7NENBMUNMLFNBQVM7c0JBQXJDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWEzQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0LCBPcHRpb25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBDb21tb25NZXRob2RzU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLCBFdmVudFNlcnZpY2UsIE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UsIFdpZGdldENvbnRlbnRTZXJ2aWNlLCBXc0V2ZW50cyB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgTG9hZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvYWRlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJ1xuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2VydGlmaWNhdGUuc2VydmljZSdcbmltcG9ydCB7IE5zRGlzY3Vzc2lvblYyIH0gZnJvbSAnQHN1bmJpcmQtY2IvZGlzY3Vzc2lvbi12MidcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTmV0Q29yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZXRjb3JlLnNlcnZpY2UnXG5pbXBvcnQgeyBDb25zZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb25zZW50LWRpYWxvZy5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLWFwcC1hcHAtdG9jLWNpb3MtaG9tZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtdG9jLWNpb3MtaG9tZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC10b2MtY2lvcy1ob21lLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFwcFRvY0Npb3NIb21lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgY29tbWVudElkPzogc3RyaW5nID0gJydcbiAgc2tlbGV0b25Mb2FkZXIgPSB0cnVlXG4gIGV4dENvbnRlbnRSZWFkRGF0YTogYW55ID0ge31cbiAgdXNlckV4dENvdXJzZUVucm9sbDogYW55ID0ge31cbiAgZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICBmb3JQcmV2aWV3OiBhbnkgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnP2VkaXRNb2RlPXRydWUnKVxuICBleHRDb250ZW50QXZhaWxhYmxlID0gdHJ1ZVxuICBjYW5FbnJvbGwgPSBmYWxzZVxuICBlbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IHRydWVcbiAgcmNFbGVtID0ge1xuICAgIG9mZlNldFRvcDogMCxcbiAgICBCb3R0b21Qb3M6IDAsXG4gIH1cbiAgY29udGVudExpbms6IGFueSA9ICcnXG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0Q29udGFpbmVyJykgcmNFbGVtZW50ITogRWxlbWVudFJlZlxuICBzY3JvbGxMaW1pdDogYW55XG4gIHNjcm9sbGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzTW9iaWxlID0gZmFsc2VcbiAgY29uZmlnOiBhbnlcbiAgd2lkZ2V0RGF0YTogYW55XG4gIGVuYWJsZVNoYXJlID0gZmFsc2VcbiAgcm9vdE9yZ0lkOiBhbnlcbiAgY3VycmVudExhbmc6IGFueSA9ICdlbidcbiAgZGlzY3Vzc1dpZGdldERhdGEhOiBOc0Rpc2N1c3Npb25WMi5JQ29tbWVudFdpZGdldERhdGFcbiAgc2hvd1Byb3ZpZGVyVGlwcyA9IGZhbHNlXG4gIGZyb21NRE8gPSBmYWxzZVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2Nyb2xsKCkge1xuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGltaXQpIHtcbiAgICAgIGlmICgod2luZG93LnNjcm9sbFkgKyB0aGlzLnJjRWxlbS5Cb3R0b21Qb3MpID49IHRoaXMuc2Nyb2xsTGltaXQpIHtcbiAgICAgICAgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdzdGlja3knXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIzNi4uLiAoT2Zmc2V0VG9wIG9mIHJpZ2h0IGNvbnRhaW5lciArIDEwNClcbiAgICBpZiAod2luZG93LnNjcm9sbFkgPiAodGhpcy5yY0VsZW0ub2ZmU2V0VG9wICsgMTA0KSkge1xuICAgICAgdGhpcy5zY3JvbGxlZCA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxlZCA9IGZhbHNlXG4gICAgfVxuICB9XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY29tbW9uU3ZjOiBDb21tb25NZXRob2RzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZXJ0U3ZjOiBDZXJ0aWZpY2F0ZVNlcnZpY2UsXG4gICAgcHVibGljIGxvYWRlcjogTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHVibGljIG5ldENvcmVTZXJ2aWNlOiBOZXRDb3JlU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIEBPcHRpb25hbCgpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZVxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5leHRDb250ZW50ICYmIGRhdGEuZXh0Q29udGVudC5kYXRhICYmIGRhdGEuZXh0Q29udGVudC5kYXRhLmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGEgPSBkYXRhLmV4dENvbnRlbnQuZGF0YS5jb250ZW50XG4gICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhWydjZXJ0aWZpY2F0ZU9iaiddID0ge1xuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4dENvbnRlbnRBdmFpbGFibGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS51c2VyRW5yb2xsQ29udGVudCAmJiBkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEgJiYgZGF0YS51c2VyRW5yb2xsQ29udGVudC5kYXRhLnJlc3VsdCAmJlxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEucmVzdWx0KS5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsID0gZGF0YS51c2VyRW5yb2xsQ29udGVudC5kYXRhLnJlc3VsdFxuICAgICAgICBpZiAodGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmNvbXBsZXRpb25wZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YVsnY29tcGxldGlvblN0YXR1cyddID0gMlxuXG4gICAgICAgICAgdGhpcy5kb3dubG9hZENlcnQoKVxuICAgICAgICAgIHRoaXMuY29udGVudFZpZXdFdmVudEZvck5ldENvcmUoJ2NvbXBsZXRpb24nKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRW5yb2xsbWVudEVsaWdpYmlsaXR5KClcbiAgICAgIH1cblxuICAgIH0pXG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKVxuICAgICAgdGhpcy5jdXJyZW50TGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSFcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSh0aGlzLmN1cnJlbnRMYW5nKVxuICAgIH1cbiAgICB0aGlzLmNvbmZpZ1N2Yy5sYW5ndWFnZVRyYW5zbGF0aW9uRmxhZy5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudExhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykhXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuY3VycmVudExhbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB0aGlzLnJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZFxuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRMaW5rID0gYCR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKX0ke3dpbmRvdy5sb2NhdGlvbi5zZWFyY2h9YFxuXG4gICAgdGhpcy5jb21tZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmNvbW1lbnRJZCA/IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkIDogJydcbiAgICBpZiAodGhpcy5jb21tZW50SWQpIHtcbiAgICAgIC8vdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMlxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGEpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGFcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURpc2N1c3NEYXRhKClcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEyMDApIHtcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSBmYWxzZVxuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCd2aWV3JylcbiAgfVxuXG4gIGluaXRpYWxpemVEaXNjdXNzRGF0YSgpIHtcbiAgICBpZiAoIV8uZ2V0KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCAnY29udGVudFBhcnRuZXIuaXNBY3RpdmUnLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBmcm9tIHRoaXMgbGVhcm5pbmcgcGFydG5lciBhcmUgdGVtcG9yYXJpbHkgbm90IGF2YWlsYWJsZSBvbiBpR09UIEthcm1heW9naS4gT3VyIHRlYW0gaXMgdXBkYXRpbmcgcGFydG5lciBjb250ZW50LiBJbiB0aGUgbWVhbnRpbWUsIHlvdSBjYW4gY29udGludWUgeW91ciBqb3VybmV5IHdpdGggY291cnNlcyBmcm9tIG90aGVyIHBhcnRuZXJzLicsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIV8uZ2V0KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCAnaXNBY3RpdmUnLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVGhpcyBjb3Vyc2UgaXMgbm8gbG9uZ2VyIGJlaW5nIG9mZmVyZWQgaW4gaXRzIGN1cnJlbnQgZm9ybS4gV2UgYXJlIHVwZGF0aW5nIG91ciBjYXRhbG9nIHRvIGJyaW5nIHlvdSBpbXByb3ZlZCBsZWFybmluZyBvcHRpb25zLiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgY291cnNlIHdpdGggc2ltaWxhciB0b3BpY3Mgb3IgYnJvd3NlIHJlY29tbWVuZGVkIGNvdXJzZXMuJywgJ1gnLCB7XG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMCxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YSkge1xuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSA9IHRoaXMuY29uZmlnLmRpc2N1c3NXaWRnZXREYXRhXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkXG4gICAgICAgIGlmICh0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbiAmJiB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkpIHtcbiAgICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkuY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0RGF0YSA9IHtcbiAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgIHR5cGU6ICd0aXBzJyxcbiAgICAgICAgY2FyZENsYXNzOiAnc2xpZGVyLWNvbnRhaW5lcicsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBzbGlkZXJEYXRhOiBfLmdldCh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSwgJ2NvbnRlbnRQYXJ0bmVyLnByb3ZpZGVyVGlwcycsIFtdKVxuICAgICAgfVxuICAgICAgdGhpcy5zaG93UHJvdmlkZXJUaXBzID0gKHRoaXMud2lkZ2V0RGF0YSAmJiB0aGlzLndpZGdldERhdGEuc2xpZGVyRGF0YT8ubGVuZ3RoKSAmJlxuICAgICAgICAoT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHRoaXMudXNlckV4dENvdXJzZUVucm9sbD8uaXNzdWVkX2NlcnRpZmljYXRlcz8ubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHRoaXMudXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPD0gMTAwKSlcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRCb3gucGxhY2Vob2xkZXIgPSAnU3RhcnQgYSBkaXNjdXNzaW9uJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRCb3gucGxhY2Vob2xkZXIgPSAnRW5yb2wgdG8gYWRkIHlvdXIgY29tbWVudHMnXG4gICAgICB9XG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0geyAuLi50aGlzLmRpc2N1c3NXaWRnZXREYXRhIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYXBpdGFsaXplKHN0cjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TdmMuaGFuZGxlQ2FwaXRhbGl6ZShzdHIsIHR5cGUpXG4gIH1cblxuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucmNFbGVtZW50KSB7XG4gICAgICB0aGlzLnJjRWxlbS5Cb3R0b21Qb3MgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCArIHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICB0aGlzLnJjRWxlbS5vZmZTZXRUb3AgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcFxuICAgIH1cbiAgfVxuICByZWRpcmVjdFRvQ29udGVudChjb250ZW50RGF0YTogYW55KSB7XG4gICAgY29uc3QgdXNlckRhdGE6IGFueSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlVjJcbiAgICBjb25zdCBleHRVcmw6IHN0cmluZyA9IGNvbnRlbnREYXRhLnJlZGlyZWN0VXJsLnJlcGxhY2UoJzx1c2VybmFtZT4nLCB1c2VyRGF0YS5lbWFpbClcbiAgICByZXR1cm4gZXh0VXJsXG4gIH1cbiAgcmVwbGFjZVRleHQoc3RyOiBhbnksIHJlcGxhY2VUeHQ6IGFueSkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZUFsbChyZXBsYWNlVHh0LCAnJylcbiAgfVxuXG4gIGZvcm1hdGNvdXJzZVByb3ZpZGVycyhwcm92aWRlcnM6IGFueVtdKTogc3RyaW5nIHtcbiAgICBpZiAoIXByb3ZpZGVycyB8fCAhQXJyYXkuaXNBcnJheShwcm92aWRlcnMpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgcmV0dXJuIHByb3ZpZGVycy5tYXAoKHByb3ZpZGVyOiBhbnkpID0+IHByb3ZpZGVyLm5hbWUpLmpvaW4oJywgJylcbiAgfVxuXG4gIGFzeW5jIGVuUm9sbFRvRXh0Q291cnNlKGNvbnRlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvbnNlbnRVcmw6IHN0cmluZyA9IGAke3RoaXMuZW52aXJvbm1lbnQ/Lm1pc3Npb25LYXJtYXlvZ2lQYXRofSR7dGhpcy5jb25maWc/LmNvbnRlbnRDb25zZW50Py5jb25zZW50RG9jVXJsfWAgfHwgJydcbiAgICBjb25zdCBhc3NldHNEb2NVcmw6IHN0cmluZyA9IGAke3RoaXMuY29uZmlnPy5jb250ZW50Q29uc2VudD8uYXNzZXRzRG9jVXJsfWAgfHwgJydcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKENvbnNlbnREaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnOTAwcHgnLFxuICAgICAgaGVpZ2h0OiAnNzB2aCcsXG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogJ2NvbnNlbnQtZGlhbG9nLXBhbmVsJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29uc2VudFVybDogY29uc2VudFVybCxcbiAgICAgICAgYXNzZXRzRG9jVXJsOiBhc3NldHNEb2NVcmxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSGFuZGxlIGRpYWxvZyBjbG9zZVxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIFVzZXIgYWdyZWVkIC0gcHJvY2VlZCB3aXRoIGVucm9sbG1lbnRcbiAgICAgICAgLy8gbmVlZCB0byBjYWxsIGNvbnNlbnQgYXBpXG4gICAgICAgIHRoaXMuY2FsbENvbnNlbnRBcGkoY29udGVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZXIgZGlzYWdyZWVkXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignWW91IG11c3QgYWdyZWUgdG8gdGhlIHRlcm1zIHRvIGVucm9sbCBpbiB0aGlzIGNvdXJzZS4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY2FsbENvbnNlbnRBcGkoY29udGVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coY29udGVudClcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJjb250ZW50SWRcIjogY29udGVudD8uY29udGVudElkLFxuICAgICAgICBcImNvbnNlbnRJZFwiOiB0aGlzLmNvbmZpZz8uY29udGVudENvbnNlbnQ/LmNvbnNlbnRJZCB8fCAnJyxcbiAgICAgICAgXCJhZGRpdGlvbmFsQXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgXCJ1c2VyUm9sZXNcIjogW1wicHVibGljXCJdLFxuICAgICAgICAgIFwidmVyc2lvbktleVwiOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHdpdGggdGhlIGFib3ZlIGRlY2xhcmF0aW9uLlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNlcnRTdmMuY29uc2VudFN1Ym1pdChyZXF1ZXN0KS5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5wcm9jZWVkV2l0aEVucm9sbG1lbnQoY29udGVudClcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byBzdWJtaXQgY29uc2VudCcsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuICBwcml2YXRlIGFzeW5jIHByb2NlZWRXaXRoRW5yb2xsbWVudChjb250ZW50OiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQodHJ1ZSlcbiAgICBjb25zdCByZXFib2R5ID0ge1xuICAgICAgY291cnNlSWQ6IGNvbnRlbnQuY29udGVudElkLFxuICAgICAgcGFydG5lcklkOiBjb250ZW50LmNvbnRlbnRQYXJ0bmVyLmlkLFxuICAgIH1cbiAgICBjb25zdCBlbnJvbGxSZXMgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuZXh0Q29udGVudEVucm9sbChyZXFib2R5KS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4geyByZXR1cm4gX2Vycm9yIH0pXG4gICAgaWYgKGVucm9sbFJlcyAmJiBlbnJvbGxSZXMucmVzdWx0ICYmIE9iamVjdC5rZXlzKGVucm9sbFJlcy5yZXN1bHQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50Qm94LnBsYWNlaG9sZGVyID0gJ1N0YXJ0IGEgZGlzY3Vzc2lvbidcbiAgICAgIHRoaXMuZ2V0VXNlckNvbnRlbnRFbnJvbGwoY29udGVudC5jb250ZW50SWQpXG4gICAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCdlbnJvbGwnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQoZmFsc2UpXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZW5yb2xsUmVzPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byBlbnJvbGwgdG8gdGhlIGNvbnRlbnQnLCAnWCcsIHtcbiAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRVc2VyQ29udGVudEVucm9sbChjb250ZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbFJlcyA9IGF3YWl0IHRoaXMuY29udGVudFN2Yy5mZXRjaEV4dFVzZXJDb250ZW50RW5yb2xsKGNvbnRlbnRJZCkudG9Qcm9taXNlKCkuY2F0Y2goX2Vycm9yID0+IHsgfSlcbiAgICBpZiAoZW5yb2xsUmVzICYmIGVucm9sbFJlcy5yZXN1bHQgJiYgT2JqZWN0LmtleXMoZW5yb2xsUmVzLnJlc3VsdCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsID0gZW5yb2xsUmVzLnJlc3VsdFxuICAgICAgdGhpcy5sb2FkZXIuY2hhbmdlTG9hZC5uZXh0KGZhbHNlKVxuICAgICAgdGhpcy50ZWxlbWV0cnlUb0NhcHR1cmVJbnRlcmFjdChjb250ZW50SWQsICdlbnJvbGwnLCAnZW5yb2wtY29udGVudCcpXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1N1Y2Nlc3NmdWxseSBlbnJvbGxlZCBpbiB0aGUgY291cnNlLicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyLmNoYW5nZUxvYWQubmV4dChmYWxzZSlcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVW5hYmxlIHRvIGdldCB0aGUgZW5yb2xsZWQgZGV0YWlscycpXG4gICAgfVxuICB9XG5cbiAgY2FwdHVyZVJlZGlyZWN0VGVsZW1ldHJ5KGNvbnRlbnQ6IGFueSkge1xuICAgIHRoaXMucmFpc2VUZWxlbXRyeVN0YXJ0RXZlbnQoKVxuICAgIHRoaXMudGVsZW1ldHJ5VG9DYXB0dXJlSW50ZXJhY3QoY29udGVudC5jb250ZW50SWQsICdyZWRpcmVjdCcsICdyZWRpcmVjdC1jb250ZW50JylcbiAgICB0aGlzLnJhaXNlVGVsZW10cnlFbmRFdmVudCgpXG4gIH1cblxuICByYWlzZVRlbGVtdHJ5U3RhcnRFdmVudCgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBmcm9tOiAndGVzdCcsXG4gICAgICB0bzogJycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICcnIH0sXG4gICAgICAgIG9iamVjdDoge30sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXG4gICAgICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICB9XG4gICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudClcblxuICB9XG5cbiAgdGVsZW1ldHJ5VG9DYXB0dXJlSW50ZXJhY3QoY29udGVudElkOiBhbnksIHN1YlR5cGU6IGFueSwgaWQ6IGFueSkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGUsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBjb250ZW50SWQsXG4gICAgICAgIHR5cGU6ICdFeHRlcm5hbCBjb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1vZHVsZTogJ0hvbWUnLFxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHJhaXNlVGVsZW10cnlFbmRFdmVudCgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBmcm9tOiAndGVzdCcsXG4gICAgICB0bzogJycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICcnIH0sXG4gICAgICAgIG9iamVjdDoge30sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcbiAgICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmV2ZW50cy5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRDZXJ0KCkge1xuICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSB0cnVlXG4gICAgY29uc3QgY2VydFJlczogYW55ID0gYXdhaXRcbiAgICAgIHRoaXMuY2VydFN2Yy5kb3dubG9hZENlcnRpZmljYXRlX3YyKHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzWzBdLmlkZW50aWZpZXIpLnRvUHJvbWlzZSgpLmNhdGNoKF9lcnJvciA9PiB7IH0pXG4gICAgaWYgKGNlcnRSZXMgJiYgT2JqZWN0LmtleXMoY2VydFJlcy5yZXN1bHQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzICYmIHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzLmxlbmd0aFxuICAgICAgICAmJiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXSkge1xuICAgICAgICB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YVsnY2VydGlmaWNhdGVPYmonXSA9IHtcbiAgICAgICAgICBkYXRhOiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXSxcbiAgICAgICAgICBjZXJ0RGF0YTogY2VydFJlcy5yZXN1bHQucHJpbnRVcmksXG4gICAgICAgICAgY2VydElkOiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXS5pZGVudGlmaWVyLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuICBvbkNsaWNrT2ZTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gdHJ1ZVxuICAgIC8vdGhpcy5yYWlzZVRlbGVtZXRyeUZvclNoYXJlKCdzaGFyZUNvbnRlbnQnKVxuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgLy8gcmFpc2VUZWxlbWV0cnlGb3JTaGFyZShzdWJUeXBlOiBhbnkpIHtcbiAgLy8gICAvL2NvbnNvbGUubG9nKHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCB0aGlzLmV2ZW50cywgc3ViVHlwZSlcbiAgLy8gICAvLyB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAvLyAgIC8vIHtcbiAgLy8gICAvLyAgIHR5cGU6ICdjbGljaycsXG4gIC8vICAgLy8gICBzdWJUeXBlLFxuICAvLyAgIC8vICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gIC8vICAgLy8gfSxcbiAgLy8gICAvLyB7XG4gIC8vICAgLy8gICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgLy8gICAvLyAgIHR5cGU6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgOiAnJyxcbiAgLy8gICAvLyB9LFxuICAvLyAgIC8vIHtcbiAgLy8gICAvLyAgIHBhZ2VJZEV4dDogYGJ0bi0ke3N1YlR5cGV9YCxcbiAgLy8gICAvLyAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuQ09OVEVOVCxcbiAgLy8gICAvLyB9XG4gIC8vICAgLy8gKVxuICAvLyB9XG5cbiAgcmVzZXRFbmFibGVTaGFyZShfZXZlbnREYXRhOiBhbnkpIHtcblxuICAgIHRoaXMuZW5hYmxlU2hhcmUgPSBmYWxzZVxuICB9XG5cbiAgY29udGVudFZpZXdFdmVudEZvck5ldENvcmUoZXZlbnRUeXBlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnLm5ldGNvcmVXZWJDb25maWcgIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5pc0FjdGl2ZSAvLyBOT1NPTkFSXG4gICAgICAmJiB0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnLm5ldGNvcmVXZWJDb25maWcuZXZlbnRzIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMuY29udGVudF92aWV3IC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMuY29udGVudF92aWV3LmlzQWN0aXZlIC8vIE5PU09OQVJcbiAgICApIHtcbiAgICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7fVxuICAgICAgLy8gaWYgKHRoaXMuY29uZmlnU3ZjICYmIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlciAmJiB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllcikgeyAvLyBOT1NPTkFSXG4gICAgICAvLyAgIHBheWxvYWRbJ3BrXnVzZXJpZCddID0gdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgIC8vIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdwYXlsb2FkJywgcGF5bG9hZClcbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5uYW1lKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEubmFtZVxuICAgICAgfVxuICAgICAgLy8gaWYodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY291cnNlQ2F0ZWdvcnkpIHtcbiAgICAgIHBheWxvYWRbJ2NvbnRlbnRfY2F0ZWdvcnknXSA9ICdFeHRlcm5hbCBDb3Vyc2UnXG4gICAgICAvLyB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuZXh0ZXJuYWxJZCkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2lkJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5leHRlcm5hbElkXG4gICAgICB9XG4gICAgICAvLyBpZih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5uYW1lKSB7XG4gICAgICBwYXlsb2FkWydjb250ZW50X3VybCddID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgIC8vIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5hcHBJY29uKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfaW1hZ2UnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmFwcEljb25cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbikge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbiAmJiBOdW1iZXIodGhpcy5leHRDb250ZW50UmVhZERhdGEuZHVyYXRpb24pID4gMCA/IE51bWJlcih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbikgOiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSAwXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXZnUmF0aW5nXG4gICAgICApIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9yYXRpbmcnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmF2Z1JhdGluZ1xuICAgICAgICBwYXlsb2FkWydjb250ZW50IHJhdGluZyddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXZnUmF0aW5nXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEudG90YWxOb09mUmF0aW5nKSB7XG4gICAgICAgIHBheWxvYWRbJ25vX3VzZXJzX3JhdGVkJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS50b3RhbE5vT2ZSYXRpbmdcbiAgICAgIH1cbiAgICAgIC8vIGlmKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoKSB7XG4gICAgICBwYXlsb2FkWydsZWFybmluZ19wYXRoX2NvbnRlbnQnXSA9IE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gICAgICBwYXlsb2FkWydsZWFybmluZyBwYXRoIGNvbnRlbnQnXSA9IE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAvLyB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuc291cmNlKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuc291cmNlXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyICYmXG4gICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyLmNvbnRlbnRQYXJ0bmVyTmFtZVxuICAgICAgKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuY29udGVudFBhcnRuZXJOYW1lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X3Byb3ZpZGVyX25hbWUnXSA9ICdLYXJtYXlvZ2kgQmhhcmF0J1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgIHRoaXMubmV0Q29yZVNlcnZpY2UudHJhY2tFdmVudEZvckNvbnRlbnRBbmRFdmVudCgnY29udGVudF92aWV3JywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X2Vucm9sbWVudCcsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0aW9uJykge1xuICAgICAgICB0aGlzLm5ldENvcmVTZXJ2aWNlLnRyYWNrRXZlbnRGb3JDb250ZW50QW5kRXZlbnQoJ2NvbnRlbnRfY29tcGxldGlvbicsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgc2Vjb25kc1RvVGltZShkOiBhbnkpIHtcbiAgICBkID0gTnVtYmVyKGQpXG4gICAgdmFyIGggPSBNYXRoLmZsb29yKGQgLyAzNjAwKVxuICAgIHZhciBtID0gTWF0aC5mbG9vcihkICUgMzYwMCAvIDYwKVxuICAgIHZhciBzID0gTWF0aC5mbG9vcihkICUgMzYwMCAlIDYwKVxuXG4gICAgdmFyIGhEaXNwbGF5ID0gaCA+IDAgPyBoICsgKGggPT0gMSA/IFwiIGhvdXIsIFwiIDogXCIgaG91cnMsIFwiKSA6IFwiXCJcbiAgICB2YXIgbURpc3BsYXkgPSBtID4gMCA/IG0gKyAobSA9PSAxID8gXCIgbWludXRlLCBcIiA6IFwiIG1pbnV0ZXMsIFwiKSA6IFwiXCJcbiAgICB2YXIgc0Rpc3BsYXkgPSBzID4gMCA/IHMgKyAocyA9PSAxID8gXCIgc2Vjb25kXCIgOiBcIiBzZWNvbmRzXCIpIDogXCJcIlxuICAgIHJldHVybiBoRGlzcGxheSArIG1EaXNwbGF5ICsgc0Rpc3BsYXlcbiAgfVxuXG4gIGNsZWFyQ29tbWVudElkRnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfVxuICAgIGRlbGV0ZSBjdXJyZW50UXVlcnlQYXJhbXMuY29tbWVudElkXG4gICAgdGhpcy5jb21tZW50SWQgPSAnJ1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVucm9sbG1lbnRFbGlnaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHZhbGlkYXRlIGlmIHVzZXIgaXMgbm90IGFscmVhZHkgZW5yb2xsZWQgYW5kIGNvbnRlbnQgaXMgYXZhaWxhYmxlXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID09PSAwICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRJZCAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50UGFydG5lciAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50UGFydG5lci5pZCkge1xuICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IHRydWVcbiAgICAgIHRoaXMuY2VydFN2Yy52YWxpZGF0ZUVucm9sbG1lbnRFbGlnaWJpbGl0eSh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50SWQsIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyLmlkKS5zdWJzY3JpYmUoXG4gICAgICAgIChfcmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuY2FuRW5yb2xsID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LnBhcmFtcz8ubXNnIHx8ICdVbmFibGUgdG8gdmFsaWRhdGUgZW5yb2xsbWVudCBlbGlnaWJpbGl0eScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5jYW5FbnJvbGwgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dFbnJvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID09PSAwICYmXG4gICAgICAhdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyAmJlxuICAgICAgdGhpcy5jYW5FbnJvbGwgJiZcbiAgICAgIF8uZ2V0KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCAnY29udGVudFBhcnRuZXIuaXNBY3RpdmUnLCBmYWxzZSlcbiAgfVxuXG4gIGdldCBzaG93UmVkaXJlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID4gMCAmJlxuICAgICAgXy5nZXQodGhpcy5leHRDb250ZW50UmVhZERhdGEsICdyZWRpcmVjdFVybCcpICYmXG4gICAgICBfLmdldCh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSwgJ2NvbnRlbnRQYXJ0bmVyLmlzQWN0aXZlJywgZmFsc2UpXG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4dENvbnRlbnRBdmFpbGFibGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidG9jLWJhbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBmaXhlZC13aWR0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbm5lci1kZXRhaWxzIHRvYy1jb250ZW50XCIgI2Jhbm5lckRldGFpbHM+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMzJweCdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxNDBweCdcIiBbaGVpZ2h0XT1cIicyNHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdGFnLWRpdiByb3VuZGVkLTJ4bCBnYXAtMSBpdGVtcy1jZW50ZXIgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1vcmFuZ2UtdGV4dFwiPnZpZGVvX2xpYnJhcnk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBmb250LWJvbGQgdGV4dC13aGl0ZSBsZWFkaW5nLTNcIj57eyB0cmFuc2xhdGVMYWJlbChjb250ZW50Py5jb3Vyc2VDYXRlZ29yeSwgJ3NlYXJjaGZpbHRlcnMnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8udG9waWNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctM1wiPnt7ICdFeHRlcm5hbCBDb3Vyc2UnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHRleHQtd2hpdGUgbW9iLXNoYXJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJvbkNsaWNrT2ZTaGFyZSgpXCI+c2hhcmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEtub3dsZWRnZSBsZXZlbCBibG9jayAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImtub3dsZWRnZS1sZXZlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYmVnaW5uZXInIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWw/LnRvTG93ZXJDYXNlKCkgPT09ICdiZWdpbm5lcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGJlZ2lubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiI0RCRjREQ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NyA1QzcuNjc5MjcgNC41NTU1NSA4LjMyMDc3IDQuNTU1NTYgOC41NzczNyA1TDEyLjA0MTUgMTFDMTIuMjk4MSAxMS40NDQ0IDExLjk3NzMgMTIgMTEuNDY0MSAxMkg0LjUzNTkyQzQuMDIyNzIgMTIgMy43MDE5NyAxMS40NDQ0IDMuOTU4NTcgMTFMNy40MjI2NyA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0OUM5NTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVybWVkaWF0ZScgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ludGVybWVkaWF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGludGVybWVkaWF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiNEMURCRUNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgMi42NjY2NkM3LjY3OTI3IDIuMjIyMjEgOC4zMjA3NyAyLjIyMjIxIDguNTc3MzcgMi42NjY2NkwxMi4wNDE1IDguNjY2NjZDMTIuMjk4MSA5LjExMTEgMTEuOTc3MyA5LjY2NjY2IDExLjQ2NDEgOS42NjY2Nkg0LjUzNTkyQzQuMDIyNzIgOS42NjY2NiAzLjcwMTk3IDkuMTExMSAzLjk1ODU3IDguNjY2NjZMNy40MjI2NyAyLjY2NjY2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxQjRDQTFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjcgNS42NjY2NkM3LjY3OTI3IDUuMjIyMjEgOC4zMjA3NyA1LjIyMjIxIDguNTc3MzcgNS42NjY2NkwxMi4wNDE1IDExLjY2NjdDMTIuMjk4MSAxMi4xMTExIDExLjk3NzMgMTIuNjY2NyAxMS40NjQxIDEyLjY2NjdINC41MzU5MkM0LjAyMjcyIDEyLjY2NjcgMy43MDE5NyAxMi4xMTExIDMuOTU4NTcgMTEuNjY2N0w3LjQyMjY3IDUuNjY2NjZaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCNENBMVwiIHN0cm9rZT1cIiNEMURCRUNcIiBzdHJva2Utd2lkdGg9XCIwLjVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkdmFuY2VkJyB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYWR2YW5jZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZXZlbC1iYWRnZSBhZHZhbmNlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiI0ZGRTZFMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDIuMzMzMzRDNy42NzkyNCAxLjg4ODkgOC4zMjA3NCAxLjg4ODkgOC41NzczNCAyLjMzMzM0TDEyLjA0MTQgOC4zMzMzNEMxMi4yOTggOC43Nzc3OSAxMS45NzczIDkuMzMzMzQgMTEuNDY0MSA5LjMzMzM0SDQuNTM1ODlDNC4wMjI2OSA5LjMzMzM0IDMuNzAxOTQgOC43Nzc3OSAzLjk1ODU0IDguMzMzMzRMNy40MjI2NCAyLjMzMzM0WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgNUM3LjY3OTI0IDQuNTU1NTUgOC4zMjA3NCA0LjU1NTU2IDguNTc3MzQgNUwxMi4wNDE0IDExQzEyLjI5OCAxMS40NDQ0IDExLjk3NzMgMTIgMTEuNDY0MSAxMkg0LjUzNTg5QzQuMDIyNjkgMTIgMy43MDE5NCAxMS40NDQ0IDMuOTU4NTQgMTFMNy40MjI2NCA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRkY4MjY4XCIgc3Ryb2tlPVwiI0ZGRTZFMVwiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY0IDcuNjY2NjlDNy42NzkyNCA3LjIyMjI0IDguMzIwNzQgNy4yMjIyNCA4LjU3NzM0IDcuNjY2NjlMMTIuMDQxNCAxMy42NjY3QzEyLjI5OCAxNC4xMTExIDExLjk3NzMgMTQuNjY2NyAxMS40NjQxIDE0LjY2NjdINC41MzU4OUM0LjAyMjY5IDE0LjY2NjcgMy43MDE5NCAxNC4xMTExIDMuOTU4NTQgMTMuNjY2N0w3LjQyMjY0IDcuNjY2NjlaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiBzdHJva2U9XCIjRkZFNkUxXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXh0Q29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWwgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic5MCUnXCIgW2hlaWdodF09XCInMzJweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNzAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5uZXItdGV4dCB0ZXh0LWJhc2Ugc206dGV4dC00eGwgbGVhZGluZy02IHNtOmxlYWRpbmctMTAgZm9udC1ib2xkXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FwaXRhbGl6ZShleHRDb250ZW50UmVhZERhdGE/Lm5hbWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gc206dGV4dC1iYXNlIHNvdXJjZS10ZXh0IGZvbnQtc2VtaWJvbGQgYnJlYWstd29yZHNcIiAjY29udGVudFNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvdXJjZUVsbGlwc2lzJzogc291cmNlRWxsaXBzaXN9XCIgdGl0bGU9XCJ7e2NvbnRlbnQ/LnNvdXJjZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXJkY29udGVudHYyLmJ5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmNvdXJzZVByb3ZpZGVyPy5sZW5ndGg7ZWxzZSBjb250ZW50UGFydG5lck5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRjb3Vyc2VQcm92aWRlcnMoZXh0Q29udGVudFJlYWREYXRhPy5jb3Vyc2VQcm92aWRlcikgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudFBhcnRuZXJOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLmthcm1heW9naUJoYXJhdCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEyMHB4J1wiIFtoZWlnaHRdPVwiJzQwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic4OHB4J1wiIFtoZWlnaHRdPVwiJzI0cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmcgfHwgY29udGVudD8uYWRkaXRpb25hbFRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyByYXRpbmctY2hpcCBweS0yIGl0ZW1zLWNlbnRlciBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJoYW5kbGVOYXZpZ2F0ZVRvUmV2aWV3cygpXCIgKm5nSWY9XCJjb250ZW50Py5hdmVyYWdlUmF0aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0xIG1hcmdpbi1sZWZ0LXMgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3JhZGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd2hpdGUgdGV4dC1zbSBsZWFkaW5nLTRcIj57eyBjb250ZW50Py5hdmVyYWdlUmF0aW5nIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VwYXJhdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXdoaXRlIHRleHQtc20gbGVhZGluZy00IG1hcmdpbi1yaWdodC1tXCI+e3sgY29udGVudD8udG90YWxSYXRpbmcgfCBwaXBlQ291bnRUcmFuc2Zvcm0gfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9zdC1lbnJvbGxlZC1jaGlwIHRleHQteHMgbGVhZGluZy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnQ/LmFkZGl0aW9uYWxUYWdzPy5pbmNsdWRlcygnbW9zdFRyZW5kaW5nJylcIj57eyAnY2FyZGNvbnRlbnR2Mi5tb3N0VHJlbmRpbmcnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb250ZW50Py5hZGRpdGlvbmFsVGFncz8uaW5jbHVkZXMoJ21vc3RFbnJvbGxlZCcpXCI+e3sgJ2NhcmRjb250ZW50djIubW9zdEVucm9sbGVkJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxODBweCdcIiBbaGVpZ2h0XT1cIicyMHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXIgJiYgZXh0Q29udGVudFJlYWREYXRhPy5sYXN0VXBkYXRlZE9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTQgc291cmNlLXRleHRcIj4oe3sgJ2FwcHRvYy5sYXN0VXBkYXRlZE9uJyB8IHRyYW5zbGF0ZSB9fSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dENvbnRlbnRSZWFkRGF0YT8ubGFzdFVwZGF0ZWRPbiB8IGRhdGU6ICdNTU0gZCwgeScgfX0pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlld1wiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc01vYmlsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgcC01IGJvcmRlci1ib3R0b20gcG9zaXRpb24tYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCB3LWZ1bGwgd3MtbWF0LWJsYWNrLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMiAgd3MtbWF0LWJsYWNrLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3VzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzfX0lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1jb250ZW50LXByb2dyZXNzIFtjb250ZW50SWRdPVwidXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2dyZXNzXT1cInVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc1R5cGVdPVwiJ3BlcmNlbnRhZ2UnXCIgW2N1c3RvbUNsYXNzTmFtZV09XCIndmlld2VyLXByb2dyZXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1jb250ZW50LXByb2dyZXNzPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dFbnJvbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciBmbGV4LW1pZGRsZSByZXN1bWVcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlblJvbGxUb0V4dENvdXJzZShleHRDb250ZW50UmVhZERhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLmVucm9sbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMzJweCdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UmVkaXJlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImV4dENvbnRlbnRSZWFkRGF0YT8ucmVkaXJlY3RVcmxcIiAoY2xpY2spPVwiY2FwdHVyZVJlZGlyZWN0VGVsZW1ldHJ5KGV4dENvbnRlbnRSZWFkRGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUucmVkaXJlY3QnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWwtMiB3cy1tYXQtd2hpdGUtdGV4dFwiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9JyAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5pc3N1ZWRfY2VydGlmaWNhdGVzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciBmbGV4LW1pZGRsZSByZXN1bWVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRvd25sb2FkQ2VydCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJmdXNpb24tYXNzZXRzL2ltYWdlcy9jZXJ0aWZpY2F0ZS1pY28uc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DZXJ0aWZpY2F0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAgKm5nSWY9XCIhZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIiBjbGFzcz1cIm1sLTJcIj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VudGVyIGZsZXggZmxleC1taWRkbGUgY2VydGlmaWNhdGUtbG9hZGVyIG1hcmdpbi1sZWZ0LXNcIiAqbmdJZj1cImRvd25sb2FkQ2VydGlmaWNhdGVMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZT1cIid3aGl0ZSdcIiBjbGFzcz1cIndoaXRlLXNwaW5uZXJcIiBbZGlhbWV0ZXJdPVwiMjRcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5Qcm9ncmVzc0luZm9cIiA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHB4LTggcHktNCBnYXAtMlwiICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5kdXJhdGlvbiA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ljb25zL3RvYy90aW1lci5zdmdcIiB3aWR0aD1cIjIwcHhcIiBhbHQ9XCJ3ZWIgaW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14c1wiPnt7IGV4dENvbnRlbnRSZWFkRGF0YT8uZHVyYXRpb24gKiA2MCB8IHBpcGVEdXJhdGlvblRyYW5zZm9ybTogJ2htcycgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBmaXhlZC13aWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9jLWNvbnRlbnRcIiBbbmdDbGFzc109XCJpc01vYmlsZSA/ICcnOidtdC04IG1iLTgnXCI+XG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFib3V0JyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCIgW25nQ2xhc3NdPVwiaXNNb2JpbGUgPyAnJzonbXQtNSBtYi01J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzgwcHgnXCIgW2hlaWdodF09XCInMTZweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCdcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIG10LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInODAlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInOTUlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInNjUlJ1wiIFtoZWlnaHRdPVwiJzE2cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtYWJvdXQgW2NvbnRlbnRSZWFkRGF0YV09XCJleHRDb250ZW50UmVhZERhdGFcIiBbc2hvd1Jldmlld3NdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Jhc2VDb250ZW50UmVhZERhdGFdPVwiZXh0Q29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93TWFya2V0UGxhY2VDZXJ0aWZpY2F0ZV09XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+ICAwICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiZXh0Q29udGVudFJlYWREYXRhXCIgW2Zyb21NYXJrZXRQbGFjZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza2VsZXRvbkxvYWRlcl09XCJza2VsZXRvbkxvYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZnJvbU1ET109XCJmcm9tTURPXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3Mtd2lkZ2V0LWFwcC10b2MtYWJvdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnPy5jb21tZW50c1RhYlwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmNvbW1lbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJjb21tZW50c0RpdlwiICpuZ0lmPVwiZGlzY3Vzc1dpZGdldERhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbW1lbnRJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZC12Mi13aWRnZXQtY29tbWVudCBbd2lkZ2V0RGF0YV09XCJkaXNjdXNzV2lkZ2V0RGF0YVwiPjwvZC12Mi13aWRnZXQtY29tbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tbWVudElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0zIGN1cnNvci1wb2ludGVyIG1iLTVcIiAoY2xpY2spPVwiY2xlYXJDb21tZW50SWRGcm9tVXJsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIHRvIGFsbCBjb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIiBbY29tbWVudElkXT1cImNvbW1lbnRJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2tlbGV0b25Mb2FkZXJdPjwvZC12Mi13aWRnZXQtY29tbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDwvbmctdGVtcGxhdGU+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaWdodC1jb250ZW50XCIgI3JpZ2h0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzM4NHB4J1wiIFtoZWlnaHRdPVwiJzIyNHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGltYWdlLWRpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGV4dENvbnRlbnRSZWFkRGF0YT8uYXBwSWNvbiArICcpJywgJ2JhY2tncm91bmQtcmVwZWF0JzogJ25vLXJlcGVhdCcsICdiYWNrZ3JvdW5kLXNpemUnOiAnY292ZXInfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ltYWdlLWJhY2tkcm9wJzogc2Nyb2xsZWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gdGV4dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja09mU2hhcmUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0yIHNoYXJlLXRhZ1wiICpuZ0lmPVwiIWZvclByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zaGFyZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7ICdhcHB0b2NzaW5nbGVwYWdlLnNoYXJlJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiICpuZ0lmPVwic2Nyb2xsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteGwgbGVhZGluZy02IHRleHQtd2hpdGUgZm9udC1ib2xkIHRleHQtc2Nyb2wtY3VzdG9tXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNhcGl0YWxpemUoZXh0Q29udGVudFJlYWREYXRhPy5uYW1lKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGV4dC1zbSBzb3VyY2UtdGV4dCBmb250LXNlbWlib2xkIGJyZWFrLXdvcmRzXCIgI2NvbnRlbnRTb3VyY2UgW25nQ2xhc3NdPVwieydzb3VyY2VFbGxpcHNpcyc6IHNvdXJjZUVsbGlwc2lzfVwiIHRpdGxlPVwie3tjb250ZW50Py5zb3VyY2V9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhcmRjb250ZW50djIuYnknIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPnt7IGV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWV4dENvbnRlbnRSZWFkRGF0YT8uY29udGVudFBhcnRuZXI/LmNvbnRlbnRQYXJ0bmVyTmFtZVwiPnt7ICdjb21tb24ua2FybWF5b2dpQmhhcmF0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZvclByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTMgcC0zIGJvcmRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIHctZnVsbCB3cy1tYXQtYmxhY2stdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMiAgd3MtbWF0LWJsYWNrLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc319JTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1jb250ZW50LXByb2dyZXNzIFtjb250ZW50SWRdPVwidXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9ncmVzc109XCJ1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2dyZXNzVHlwZV09XCIncGVyY2VudGFnZSdcIiBbY3VzdG9tQ2xhc3NOYW1lXT1cIid2aWV3ZXItcHJvZ3Jlc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1jb250ZW50LXByb2dyZXNzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dFbnJvbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5Sb2xsVG9FeHRDb3Vyc2UoZXh0Q29udGVudFJlYWREYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLmVucm9sbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnJvbGxWYWxpZGF0aW9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTAwJSdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dSZWRpcmVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImV4dENvbnRlbnRSZWFkRGF0YT8ucmVkaXJlY3RVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FwdHVyZVJlZGlyZWN0VGVsZW1ldHJ5KGV4dENvbnRlbnRSZWFkRGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAnYXBwdG9jaG9tZS5yZWRpcmVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1sLTIgd3MtbWF0LXdoaXRlLXRleHRcIj5vcGVuX2luX25ldzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9JyAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5pc3N1ZWRfY2VydGlmaWNhdGVzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzcyA9PT0gMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZG93bmxvYWRDZXJ0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImZ1c2lvbi1hc3NldHMvaW1hZ2VzL2NlcnRpZmljYXRlLWljby5zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5DZXJ0aWZpY2F0ZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gICpuZ0lmPVwiIWRvd25sb2FkQ2VydGlmaWNhdGVMb2FkaW5nXCIgY2xhc3M9XCJtbC0yXCI+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIgZmxleCBmbGV4LW1pZGRsZSBjZXJ0aWZpY2F0ZS1sb2FkZXIgbWFyZ2luLWxlZnQtc1wiICpuZ0lmPVwiZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiIHN0cm9rZT1cIid3aGl0ZSdcIiBjbGFzcz1cIndoaXRlLXNwaW5uZXJcIiBbZGlhbWV0ZXJdPVwiMjRcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpblByb2dyZXNzSW5mb1wiID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBrcGktdmFsdWVzIGl0ZW1zLWNlbnRlciBnYXAtMlwiICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5kdXJhdGlvbiA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pY29ucy90b2MvdGltZXIuc3ZnXCIgd2lkdGg9XCIyMHB4XCIgYWx0PVwid2ViIGltYWdlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXh0Q29udGVudFJlYWREYXRhPy5kdXJhdGlvbiB8IHBpcGVEdXJhdGlvblRyYW5zZm9ybTogJ2htcycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPGRpdiAqbmdJZj1cIiFleHRDb250ZW50QXZhaWxhYmxlXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgdy1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYXJnaW4teGwgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9jb21tb24vZXJyb3ItcGFnZXMvZW1wdHlfc2VhcmNoLnN2Z1wiIHdzVXRpbHNJbWFnZVJlc3BvbnNpdmUgYWx0PVwiTm8gcmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXJnaW4tdG9wLWwgbWFyZ2luLWJvdHRvbS1zXCI+XG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJtYXQtaDJcIiBpMThuPVwic2VhcmNoIHJvdXRlIG5vIHJlc3VsdFwiPnt7J2xlYXJuc2VhcmNoLm5vUmVzdWx0cycgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cblxuPHdzLWFwcC1zaGFyZS10b2MgKm5nSWY9XCJlbmFibGVTaGFyZVwiIFtjb250ZW50TGlua109XCJjb250ZW50TGlua1wiIFtyb290T3JnSWRdPVwicm9vdE9yZ0lkXCIgW2NvbnRlbnRdPVwiZXh0Q29udGVudFJlYWREYXRhXCJcbiAgICAocmVzZXRFbmFibGVTaGFyZSk9XCJyZXNldEVuYWJsZVNoYXJlKCRldmVudClcIj48L3dzLWFwcC1zaGFyZS10b2M+XG5cbjxuZy10ZW1wbGF0ZSAjaW5Qcm9ncmVzc0luZm8+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQcm92aWRlclRpcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5vLWNlcnRpZmljYXRlLWZvdW5kIG10LTYgbWItNCBteC0yIHAtMlwiID5cbiAgICAgICAgICAgIDx3cy13aWRnZXQtc2xpZGVycy1keW5hbWljIFt3aWRnZXREYXRhXT1cIndpZGdldERhdGFcIj48L3dzLXdpZGdldC1zbGlkZXJzLWR5bmFtaWM+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1jaW9zLWhvbWUvYXBwLXRvYy1jaW9zLWhvbWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBSXZILE9BQU8sRUFBOEYsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFNM0ksT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPbkUsTUFBTSxPQUFPLHVCQUF1QjtJQTRCbEMsWUFBWTtRQUVWLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO2FBQ3ZEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFBO2FBQ3REO1NBQ0Y7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxNQUFNLENB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Q0FBQyxJQUFJLENBQUMsdUJBQXVCO1lBQzdCLElBQUksQ0FBQyxTQUFTO1lBQ2QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNyRCxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUM7WUFDN0MsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDcEUsQ0FBQzsrR0F4Z0JVLHVCQUF1QiwrWkF5RHhCLGFBQWE7bUdBekRaLHVCQUF1QiwrT0NuQnBDLDgxMEJBaVljOzs0RkQ5V0QsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLDBCQUEwQjs7MEJBNkRqQyxNQUFNOzJCQUFDLGFBQWE7OzBCQUFHLFFBQVE7NENBMUNMLFNBQVM7c0JBQXJDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWEzQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0LCBPcHRpb25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBDb21tb25NZXRob2RzU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLCBFdmVudFNlcnZpY2UsIE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UsIFdpZGdldENvbnRlbnRTZXJ2aWNlLCBXc0V2ZW50cyB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgTG9hZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvYWRlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJ1xuaW1wb3J0IHsgQ2VydGlmaWNhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2VydGlmaWNhdGUuc2VydmljZSdcbmltcG9ydCB7IE5zRGlzY3Vzc2lvblYyIH0gZnJvbSAnQHN1bmJpcmQtY2IvZGlzY3Vzc2lvbi12MidcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTmV0Q29yZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZXRjb3JlLnNlcnZpY2UnXG5pbXBvcnQgeyBDb25zZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb25zZW50LWRpYWxvZy5jb21wb25lbnQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3dzLWFwcC1hcHAtdG9jLWNpb3MtaG9tZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtdG9jLWNpb3MtaG9tZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwcC10b2MtY2lvcy1ob21lLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFwcFRvY0Npb3NIb21lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgY29tbWVudElkPzogc3RyaW5nID0gJydcbiAgc2tlbGV0b25Mb2FkZXIgPSB0cnVlXG4gIGV4dENvbnRlbnRSZWFkRGF0YTogYW55ID0ge31cbiAgdXNlckV4dENvdXJzZUVucm9sbDogYW55ID0ge31cbiAgZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICBmb3JQcmV2aWV3OiBhbnkgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnP2VkaXRNb2RlPXRydWUnKVxuICBleHRDb250ZW50QXZhaWxhYmxlID0gdHJ1ZVxuICBjYW5FbnJvbGwgPSBmYWxzZVxuICBlbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IHRydWVcbiAgcmNFbGVtID0ge1xuICAgIG9mZlNldFRvcDogMCxcbiAgICBCb3R0b21Qb3M6IDAsXG4gIH1cbiAgY29udGVudExpbms6IGFueSA9ICcnXG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0Q29udGFpbmVyJykgcmNFbGVtZW50ITogRWxlbWVudFJlZlxuICBzY3JvbGxMaW1pdDogYW55XG4gIHNjcm9sbGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGlzTW9iaWxlID0gZmFsc2VcbiAgY29uZmlnOiBhbnlcbiAgd2lkZ2V0RGF0YTogYW55XG4gIGVuYWJsZVNoYXJlID0gZmFsc2VcbiAgcm9vdE9yZ0lkOiBhbnlcbiAgY3VycmVudExhbmc6IGFueSA9ICdlbidcbiAgZGlzY3Vzc1dpZGdldERhdGEhOiBOc0Rpc2N1c3Npb25WMi5JQ29tbWVudFdpZGdldERhdGFcbiAgc2hvd1Byb3ZpZGVyVGlwcyA9IGZhbHNlXG4gIGZyb21NRE8gPSBmYWxzZVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2Nyb2xsKCkge1xuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGltaXQpIHtcbiAgICAgIGlmICgod2luZG93LnNjcm9sbFkgKyB0aGlzLnJjRWxlbS5Cb3R0b21Qb3MpID49IHRoaXMuc2Nyb2xsTGltaXQpIHtcbiAgICAgICAgdGhpcy5yY0VsZW1lbnQubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdzdGlja3knXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJ1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIzNi4uLiAoT2Zmc2V0VG9wIG9mIHJpZ2h0IGNvbnRhaW5lciArIDEwNClcbiAgICBpZiAod2luZG93LnNjcm9sbFkgPiAodGhpcy5yY0VsZW0ub2ZmU2V0VG9wICsgMTA0KSkge1xuICAgICAgdGhpcy5zY3JvbGxlZCA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxlZCA9IGZhbHNlXG4gICAgfVxuICB9XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgY29tbW9uU3ZjOiBDb21tb25NZXRob2RzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZXJ0U3ZjOiBDZXJ0aWZpY2F0ZVNlcnZpY2UsXG4gICAgcHVibGljIGxvYWRlcjogTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHVibGljIG5ldENvcmVTZXJ2aWNlOiBOZXRDb3JlU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIEBPcHRpb25hbCgpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLnJvdXRlLmRhdGEuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZVxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5leHRDb250ZW50ICYmIGRhdGEuZXh0Q29udGVudC5kYXRhICYmIGRhdGEuZXh0Q29udGVudC5kYXRhLmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5leHRDb250ZW50UmVhZERhdGEgPSBkYXRhLmV4dENvbnRlbnQuZGF0YS5jb250ZW50XG4gICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhWydjZXJ0aWZpY2F0ZU9iaiddID0ge1xuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tlbGV0b25Mb2FkZXIgPSBmYWxzZVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4dENvbnRlbnRBdmFpbGFibGUgPSBmYWxzZVxuICAgICAgICB0aGlzLnNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS51c2VyRW5yb2xsQ29udGVudCAmJiBkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEgJiYgZGF0YS51c2VyRW5yb2xsQ29udGVudC5kYXRhLnJlc3VsdCAmJlxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLnVzZXJFbnJvbGxDb250ZW50LmRhdGEucmVzdWx0KS5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsID0gZGF0YS51c2VyRW5yb2xsQ29udGVudC5kYXRhLnJlc3VsdFxuICAgICAgICBpZiAodGhpcy51c2VyRXh0Q291cnNlRW5yb2xsLmNvbXBsZXRpb25wZXJjZW50YWdlID09PSAxMDApIHtcbiAgICAgICAgICB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YVsnY29tcGxldGlvblN0YXR1cyddID0gMlxuXG4gICAgICAgICAgdGhpcy5kb3dubG9hZENlcnQoKVxuICAgICAgICAgIHRoaXMuY29udGVudFZpZXdFdmVudEZvck5ldENvcmUoJ2NvbXBsZXRpb24nKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRW5yb2xsbWVudEVsaWdpYmlsaXR5KClcbiAgICAgIH1cblxuICAgIH0pXG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKVxuICAgICAgdGhpcy5jdXJyZW50TGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSFcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSh0aGlzLmN1cnJlbnRMYW5nKVxuICAgIH1cbiAgICB0aGlzLmNvbmZpZ1N2Yy5sYW5ndWFnZVRyYW5zbGF0aW9uRmxhZy5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudExhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykhXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuY3VycmVudExhbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB0aGlzLnJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZFxuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRMaW5rID0gYCR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKX0ke3dpbmRvdy5sb2NhdGlvbi5zZWFyY2h9YFxuXG4gICAgdGhpcy5jb21tZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmNvbW1lbnRJZCA/IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkIDogJydcbiAgICBpZiAodGhpcy5jb21tZW50SWQpIHtcbiAgICAgIC8vdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMlxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGEpIHtcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGFcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURpc2N1c3NEYXRhKClcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDEyMDApIHtcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNNb2JpbGUgPSBmYWxzZVxuICAgIH1cbiAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCd2aWV3JylcbiAgfVxuXG4gIGluaXRpYWxpemVEaXNjdXNzRGF0YSgpIHtcbiAgICBpZiAoIV8uZ2V0KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCAnY29udGVudFBhcnRuZXIuaXNBY3RpdmUnLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignQ291cnNlcyBmcm9tIHRoaXMgbGVhcm5pbmcgcGFydG5lciBhcmUgdGVtcG9yYXJpbHkgbm90IGF2YWlsYWJsZSBvbiBpR09UIEthcm1heW9naS4gT3VyIHRlYW0gaXMgdXBkYXRpbmcgcGFydG5lciBjb250ZW50LiBJbiB0aGUgbWVhbnRpbWUsIHlvdSBjYW4gY29udGludWUgeW91ciBqb3VybmV5IHdpdGggY291cnNlcyBmcm9tIG90aGVyIHBhcnRuZXJzLicsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIV8uZ2V0KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCAnaXNBY3RpdmUnLCBmYWxzZSkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVGhpcyBjb3Vyc2UgaXMgbm8gbG9uZ2VyIGJlaW5nIG9mZmVyZWQgaW4gaXRzIGN1cnJlbnQgZm9ybS4gV2UgYXJlIHVwZGF0aW5nIG91ciBjYXRhbG9nIHRvIGJyaW5nIHlvdSBpbXByb3ZlZCBsZWFybmluZyBvcHRpb25zLiBQbGVhc2UgY2hvb3NlIGFub3RoZXIgY291cnNlIHdpdGggc2ltaWxhciB0b3BpY3Mgb3IgYnJvd3NlIHJlY29tbWVuZGVkIGNvdXJzZXMuJywgJ1gnLCB7XG4gICAgICAgIGR1cmF0aW9uOiAxMDAwMCxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YSkge1xuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSA9IHRoaXMuY29uZmlnLmRpc2N1c3NXaWRnZXREYXRhXG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkXG4gICAgICAgIGlmICh0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbiAmJiB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkpIHtcbiAgICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmNvbW1lbnRzTGlzdC5yZXBsaWVzU2VjdGlvbi5uZXdDb21tZW50UmVwbHkuY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudElkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0RGF0YSA9IHtcbiAgICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICAgIHR5cGU6ICd0aXBzJyxcbiAgICAgICAgY2FyZENsYXNzOiAnc2xpZGVyLWNvbnRhaW5lcicsXG4gICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICBzbGlkZXJEYXRhOiBfLmdldCh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSwgJ2NvbnRlbnRQYXJ0bmVyLnByb3ZpZGVyVGlwcycsIFtdKVxuICAgICAgfVxuICAgICAgdGhpcy5zaG93UHJvdmlkZXJUaXBzID0gKHRoaXMud2lkZ2V0RGF0YSAmJiB0aGlzLndpZGdldERhdGEuc2xpZGVyRGF0YT8ubGVuZ3RoKSAmJlxuICAgICAgICAoT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHRoaXMudXNlckV4dENvdXJzZUVucm9sbD8uaXNzdWVkX2NlcnRpZmljYXRlcz8ubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHRoaXMudXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPD0gMTAwKSlcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRCb3gucGxhY2Vob2xkZXIgPSAnU3RhcnQgYSBkaXNjdXNzaW9uJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSBmYWxzZVxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRCb3gucGxhY2Vob2xkZXIgPSAnRW5yb2wgdG8gYWRkIHlvdXIgY29tbWVudHMnXG4gICAgICB9XG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0geyAuLi50aGlzLmRpc2N1c3NXaWRnZXREYXRhIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVDYXBpdGFsaXplKHN0cjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21tb25TdmMuaGFuZGxlQ2FwaXRhbGl6ZShzdHIsIHR5cGUpXG4gIH1cblxuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucmNFbGVtZW50KSB7XG4gICAgICB0aGlzLnJjRWxlbS5Cb3R0b21Qb3MgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCArIHRoaXMucmNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XG4gICAgICB0aGlzLnJjRWxlbS5vZmZTZXRUb3AgPSB0aGlzLnJjRWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcFxuICAgIH1cbiAgfVxuICByZWRpcmVjdFRvQ29udGVudChjb250ZW50RGF0YTogYW55KSB7XG4gICAgY29uc3QgdXNlckRhdGE6IGFueSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlVjJcbiAgICBjb25zdCBleHRVcmw6IHN0cmluZyA9IGNvbnRlbnREYXRhLnJlZGlyZWN0VXJsLnJlcGxhY2UoJzx1c2VybmFtZT4nLCB1c2VyRGF0YS5lbWFpbClcbiAgICByZXR1cm4gZXh0VXJsXG4gIH1cbiAgcmVwbGFjZVRleHQoc3RyOiBhbnksIHJlcGxhY2VUeHQ6IGFueSkge1xuICAgIHJldHVybiBzdHIucmVwbGFjZUFsbChyZXBsYWNlVHh0LCAnJylcbiAgfVxuXG4gIGZvcm1hdGNvdXJzZVByb3ZpZGVycyhwcm92aWRlcnM6IGFueVtdKTogc3RyaW5nIHtcbiAgICBpZiAoIXByb3ZpZGVycyB8fCAhQXJyYXkuaXNBcnJheShwcm92aWRlcnMpKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgcmV0dXJuIHByb3ZpZGVycy5tYXAoKHByb3ZpZGVyOiBhbnkpID0+IHByb3ZpZGVyLm5hbWUpLmpvaW4oJywgJylcbiAgfVxuXG4gIGFzeW5jIGVuUm9sbFRvRXh0Q291cnNlKGNvbnRlbnQ6IGFueSkge1xuICAgIGNvbnN0IGNvbnNlbnRVcmw6IHN0cmluZyA9IGAke3RoaXMuZW52aXJvbm1lbnQ/Lm1pc3Npb25LYXJtYXlvZ2lQYXRofSR7dGhpcy5jb25maWc/LmNvbnRlbnRDb25zZW50Py5jb25zZW50RG9jVXJsfWAgfHwgJydcbiAgICBjb25zdCBhc3NldHNEb2NVcmw6IHN0cmluZyA9IGAke3RoaXMuY29uZmlnPy5jb250ZW50Q29uc2VudD8uYXNzZXRzRG9jVXJsfWAgfHwgJydcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKENvbnNlbnREaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnOTAwcHgnLFxuICAgICAgaGVpZ2h0OiAnNzB2aCcsXG4gICAgICBtYXhIZWlnaHQ6ICc5MHZoJyxcbiAgICAgIG1pbkhlaWdodDogJzQwMHB4JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogJ2NvbnNlbnQtZGlhbG9nLXBhbmVsJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29uc2VudFVybDogY29uc2VudFVybCxcbiAgICAgICAgYXNzZXRzRG9jVXJsOiBhc3NldHNEb2NVcmxcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gSGFuZGxlIGRpYWxvZyBjbG9zZVxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIC8vIFVzZXIgYWdyZWVkIC0gcHJvY2VlZCB3aXRoIGVucm9sbG1lbnRcbiAgICAgICAgLy8gbmVlZCB0byBjYWxsIGNvbnNlbnQgYXBpXG4gICAgICAgIHRoaXMuY2FsbENvbnNlbnRBcGkoY29udGVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVzZXIgZGlzYWdyZWVkXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbignWW91IG11c3QgYWdyZWUgdG8gdGhlIHRlcm1zIHRvIGVucm9sbCBpbiB0aGlzIGNvdXJzZS4nLCAnWCcsIHtcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY2FsbENvbnNlbnRBcGkoY29udGVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coY29udGVudClcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgXCJjb250ZW50SWRcIjogY29udGVudD8uY29udGVudElkLFxuICAgICAgICBcImNvbnNlbnRJZFwiOiB0aGlzLmNvbmZpZz8uY29udGVudENvbnNlbnQ/LmNvbnNlbnRJZCB8fCAnJyxcbiAgICAgICAgXCJhZGRpdGlvbmFsQXR0cmlidXRlc1wiOiB7XG4gICAgICAgICAgXCJ1c2VyUm9sZXNcIjogW1wicHVibGljXCJdLFxuICAgICAgICAgIFwidmVyc2lvbktleVwiOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICBcImRlc2NyaXB0aW9uXCI6IFwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHdpdGggdGhlIGFib3ZlIGRlY2xhcmF0aW9uLlwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNlcnRTdmMuY29uc2VudFN1Ym1pdChyZXF1ZXN0KS5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5wcm9jZWVkV2l0aEVucm9sbG1lbnQoY29udGVudClcbiAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKGVycm9yPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byBzdWJtaXQgY29uc2VudCcsICdYJywge1xuICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuICBwcml2YXRlIGFzeW5jIHByb2NlZWRXaXRoRW5yb2xsbWVudChjb250ZW50OiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQodHJ1ZSlcbiAgICBjb25zdCByZXFib2R5ID0ge1xuICAgICAgY291cnNlSWQ6IGNvbnRlbnQuY29udGVudElkLFxuICAgICAgcGFydG5lcklkOiBjb250ZW50LmNvbnRlbnRQYXJ0bmVyLmlkLFxuICAgIH1cbiAgICBjb25zdCBlbnJvbGxSZXMgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuZXh0Q29udGVudEVucm9sbChyZXFib2R5KS50b1Byb21pc2UoKS5jYXRjaChfZXJyb3IgPT4geyByZXR1cm4gX2Vycm9yIH0pXG4gICAgaWYgKGVucm9sbFJlcyAmJiBlbnJvbGxSZXMucmVzdWx0ICYmIE9iamVjdC5rZXlzKGVucm9sbFJlcy5yZXN1bHQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50Qm94LnBsYWNlaG9sZGVyID0gJ1N0YXJ0IGEgZGlzY3Vzc2lvbidcbiAgICAgIHRoaXMuZ2V0VXNlckNvbnRlbnRFbnJvbGwoY29udGVudC5jb250ZW50SWQpXG4gICAgICB0aGlzLmNvbnRlbnRWaWV3RXZlbnRGb3JOZXRDb3JlKCdlbnJvbGwnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRlci5jaGFuZ2VMb2FkLm5leHQoZmFsc2UpXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZW5yb2xsUmVzPy5lcnJvcj8ucGFyYW1zPy5tc2cgfHwgJ1VuYWJsZSB0byBlbnJvbGwgdG8gdGhlIGNvbnRlbnQnLCAnWCcsIHtcbiAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRVc2VyQ29udGVudEVucm9sbChjb250ZW50SWQ6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbFJlcyA9IGF3YWl0IHRoaXMuY29udGVudFN2Yy5mZXRjaEV4dFVzZXJDb250ZW50RW5yb2xsKGNvbnRlbnRJZCkudG9Qcm9taXNlKCkuY2F0Y2goX2Vycm9yID0+IHsgfSlcbiAgICBpZiAoZW5yb2xsUmVzICYmIGVucm9sbFJlcy5yZXN1bHQgJiYgT2JqZWN0LmtleXMoZW5yb2xsUmVzLnJlc3VsdCkubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy51c2VyRXh0Q291cnNlRW5yb2xsID0gZW5yb2xsUmVzLnJlc3VsdFxuICAgICAgdGhpcy5sb2FkZXIuY2hhbmdlTG9hZC5uZXh0KGZhbHNlKVxuICAgICAgdGhpcy50ZWxlbWV0cnlUb0NhcHR1cmVJbnRlcmFjdChjb250ZW50SWQsICdlbnJvbGwnLCAnZW5yb2wtY29udGVudCcpXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ1N1Y2Nlc3NmdWxseSBlbnJvbGxlZCBpbiB0aGUgY291cnNlLicpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyLmNoYW5nZUxvYWQubmV4dChmYWxzZSlcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbignVW5hYmxlIHRvIGdldCB0aGUgZW5yb2xsZWQgZGV0YWlscycpXG4gICAgfVxuICB9XG5cbiAgY2FwdHVyZVJlZGlyZWN0VGVsZW1ldHJ5KGNvbnRlbnQ6IGFueSkge1xuICAgIHRoaXMucmFpc2VUZWxlbXRyeVN0YXJ0RXZlbnQoKVxuICAgIHRoaXMudGVsZW1ldHJ5VG9DYXB0dXJlSW50ZXJhY3QoY29udGVudC5jb250ZW50SWQsICdyZWRpcmVjdCcsICdyZWRpcmVjdC1jb250ZW50JylcbiAgICB0aGlzLnJhaXNlVGVsZW10cnlFbmRFdmVudCgpXG4gIH1cblxuICByYWlzZVRlbGVtdHJ5U3RhcnRFdmVudCgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBmcm9tOiAndGVzdCcsXG4gICAgICB0bzogJycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICcnIH0sXG4gICAgICAgIG9iamVjdDoge30sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXG4gICAgICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICB9XG4gICAgdGhpcy5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudClcblxuICB9XG5cbiAgdGVsZW1ldHJ5VG9DYXB0dXJlSW50ZXJhY3QoY29udGVudElkOiBhbnksIHN1YlR5cGU6IGFueSwgaWQ6IGFueSkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGUsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBjb250ZW50SWQsXG4gICAgICAgIHR5cGU6ICdFeHRlcm5hbCBjb250ZW50JyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG1vZHVsZTogJ0hvbWUnLFxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHJhaXNlVGVsZW10cnlFbmRFdmVudCgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBmcm9tOiAndGVzdCcsXG4gICAgICB0bzogJycsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICcnIH0sXG4gICAgICAgIG9iamVjdDoge30sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcbiAgICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgIH1cbiAgICB0aGlzLmV2ZW50cy5kaXNwYXRjaEV2ZW50KGV2ZW50KVxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRDZXJ0KCkge1xuICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSB0cnVlXG4gICAgY29uc3QgY2VydFJlczogYW55ID0gYXdhaXRcbiAgICAgIHRoaXMuY2VydFN2Yy5kb3dubG9hZENlcnRpZmljYXRlX3YyKHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzWzBdLmlkZW50aWZpZXIpLnRvUHJvbWlzZSgpLmNhdGNoKF9lcnJvciA9PiB7IH0pXG4gICAgaWYgKGNlcnRSZXMgJiYgT2JqZWN0LmtleXMoY2VydFJlcy5yZXN1bHQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzICYmIHRoaXMudXNlckV4dENvdXJzZUVucm9sbC5pc3N1ZWRfY2VydGlmaWNhdGVzLmxlbmd0aFxuICAgICAgICAmJiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXSkge1xuICAgICAgICB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YVsnY2VydGlmaWNhdGVPYmonXSA9IHtcbiAgICAgICAgICBkYXRhOiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXSxcbiAgICAgICAgICBjZXJ0RGF0YTogY2VydFJlcy5yZXN1bHQucHJpbnRVcmksXG4gICAgICAgICAgY2VydElkOiB0aGlzLnVzZXJFeHRDb3Vyc2VFbnJvbGwuaXNzdWVkX2NlcnRpZmljYXRlc1swXS5pZGVudGlmaWVyLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxuICBvbkNsaWNrT2ZTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gdHJ1ZVxuICAgIC8vdGhpcy5yYWlzZVRlbGVtZXRyeUZvclNoYXJlKCdzaGFyZUNvbnRlbnQnKVxuICB9XG5cbiAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgLy8gcmFpc2VUZWxlbWV0cnlGb3JTaGFyZShzdWJUeXBlOiBhbnkpIHtcbiAgLy8gICAvL2NvbnNvbGUubG9nKHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCB0aGlzLmV2ZW50cywgc3ViVHlwZSlcbiAgLy8gICAvLyB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxuICAvLyAgIC8vIHtcbiAgLy8gICAvLyAgIHR5cGU6ICdjbGljaycsXG4gIC8vICAgLy8gICBzdWJUeXBlLFxuICAvLyAgIC8vICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gIC8vICAgLy8gfSxcbiAgLy8gICAvLyB7XG4gIC8vICAgLy8gICBpZDogdGhpcy5jb250ZW50ID8gdGhpcy5jb250ZW50LmlkZW50aWZpZXIgOiAnJyxcbiAgLy8gICAvLyAgIHR5cGU6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgOiAnJyxcbiAgLy8gICAvLyB9LFxuICAvLyAgIC8vIHtcbiAgLy8gICAvLyAgIHBhZ2VJZEV4dDogYGJ0bi0ke3N1YlR5cGV9YCxcbiAgLy8gICAvLyAgIG1vZHVsZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeW1vZHVsZXMuQ09OVEVOVCxcbiAgLy8gICAvLyB9XG4gIC8vICAgLy8gKVxuICAvLyB9XG5cbiAgcmVzZXRFbmFibGVTaGFyZShfZXZlbnREYXRhOiBhbnkpIHtcblxuICAgIHRoaXMuZW5hYmxlU2hhcmUgPSBmYWxzZVxuICB9XG5cbiAgY29udGVudFZpZXdFdmVudEZvck5ldENvcmUoZXZlbnRUeXBlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWdTdmMubmV0Y29yZUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnLm5ldGNvcmVXZWJDb25maWcgIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5pc0FjdGl2ZSAvLyBOT1NPTkFSXG4gICAgICAmJiB0aGlzLmNvbmZpZ1N2Yy5uZXRjb3JlQ29uZmlnLm5ldGNvcmVXZWJDb25maWcuZXZlbnRzIC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMuY29udGVudF92aWV3IC8vIE5PU09OQVJcbiAgICAgICYmIHRoaXMuY29uZmlnU3ZjLm5ldGNvcmVDb25maWcubmV0Y29yZVdlYkNvbmZpZy5ldmVudHMuY29udGVudF92aWV3LmlzQWN0aXZlIC8vIE5PU09OQVJcbiAgICApIHtcbiAgICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7fVxuICAgICAgLy8gaWYgKHRoaXMuY29uZmlnU3ZjICYmIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlciAmJiB0aGlzLmNvbmZpZ1N2Yy51bk1hcHBlZFVzZXIuaWRlbnRpZmllcikgeyAvLyBOT1NPTkFSXG4gICAgICAvLyAgIHBheWxvYWRbJ3BrXnVzZXJpZCddID0gdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKClcbiAgICAgIC8vIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdwYXlsb2FkJywgcGF5bG9hZClcbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5uYW1lKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEubmFtZVxuICAgICAgfVxuICAgICAgLy8gaWYodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuY291cnNlQ2F0ZWdvcnkpIHtcbiAgICAgIHBheWxvYWRbJ2NvbnRlbnRfY2F0ZWdvcnknXSA9ICdFeHRlcm5hbCBDb3Vyc2UnXG4gICAgICAvLyB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuZXh0ZXJuYWxJZCkge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2lkJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5leHRlcm5hbElkXG4gICAgICB9XG4gICAgICAvLyBpZih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5uYW1lKSB7XG4gICAgICBwYXlsb2FkWydjb250ZW50X3VybCddID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICAgIC8vIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5hcHBJY29uKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfaW1hZ2UnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmFwcEljb25cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbikge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbiAmJiBOdW1iZXIodGhpcy5leHRDb250ZW50UmVhZERhdGEuZHVyYXRpb24pID4gMCA/IE51bWJlcih0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5kdXJhdGlvbikgOiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X2R1cmF0aW9uJ10gPSAwXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXZnUmF0aW5nXG4gICAgICApIHtcbiAgICAgICAgcGF5bG9hZFsnY29udGVudF9yYXRpbmcnXSA9IHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmF2Z1JhdGluZ1xuICAgICAgICBwYXlsb2FkWydjb250ZW50IHJhdGluZyddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuYXZnUmF0aW5nXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEudG90YWxOb09mUmF0aW5nKSB7XG4gICAgICAgIHBheWxvYWRbJ25vX3VzZXJzX3JhdGVkJ10gPSB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS50b3RhbE5vT2ZSYXRpbmdcbiAgICAgIH1cbiAgICAgIC8vIGlmKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoKSB7XG4gICAgICBwYXlsb2FkWydsZWFybmluZ19wYXRoX2NvbnRlbnQnXSA9IE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gICAgICBwYXlsb2FkWydsZWFybmluZyBwYXRoIGNvbnRlbnQnXSA9IE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAvLyB9XG4gICAgICBpZiAodGhpcy5leHRDb250ZW50UmVhZERhdGEgJiYgdGhpcy5leHRDb250ZW50UmVhZERhdGEuc291cmNlKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuc291cmNlXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyICYmXG4gICAgICAgIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyLmNvbnRlbnRQYXJ0bmVyTmFtZVxuICAgICAgKSB7XG4gICAgICAgIHBheWxvYWRbJ2NvbnRlbnRfcHJvdmlkZXJfbmFtZSddID0gdGhpcy5leHRDb250ZW50UmVhZERhdGEuY29udGVudFBhcnRuZXIuY29udGVudFBhcnRuZXJOYW1lXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXlsb2FkWydjb250ZW50X3Byb3ZpZGVyX25hbWUnXSA9ICdLYXJtYXlvZ2kgQmhhcmF0J1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50VHlwZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgIHRoaXMubmV0Q29yZVNlcnZpY2UudHJhY2tFdmVudEZvckNvbnRlbnRBbmRFdmVudCgnY29udGVudF92aWV3JywgdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyLmlkZW50aWZpZXIudHJpbSgpLnRvTG93ZXJDYXNlKCksIHBheWxvYWQpXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgdGhpcy5uZXRDb3JlU2VydmljZS50cmFja0V2ZW50Rm9yQ29udGVudEFuZEV2ZW50KCdjb250ZW50X2Vucm9sbWVudCcsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxuICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0aW9uJykge1xuICAgICAgICB0aGlzLm5ldENvcmVTZXJ2aWNlLnRyYWNrRXZlbnRGb3JDb250ZW50QW5kRXZlbnQoJ2NvbnRlbnRfY29tcGxldGlvbicsIHRoaXMuY29uZmlnU3ZjLnVuTWFwcGVkVXNlci5pZGVudGlmaWVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCBwYXlsb2FkKVxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgc2Vjb25kc1RvVGltZShkOiBhbnkpIHtcbiAgICBkID0gTnVtYmVyKGQpXG4gICAgdmFyIGggPSBNYXRoLmZsb29yKGQgLyAzNjAwKVxuICAgIHZhciBtID0gTWF0aC5mbG9vcihkICUgMzYwMCAvIDYwKVxuICAgIHZhciBzID0gTWF0aC5mbG9vcihkICUgMzYwMCAlIDYwKVxuXG4gICAgdmFyIGhEaXNwbGF5ID0gaCA+IDAgPyBoICsgKGggPT0gMSA/IFwiIGhvdXIsIFwiIDogXCIgaG91cnMsIFwiKSA6IFwiXCJcbiAgICB2YXIgbURpc3BsYXkgPSBtID4gMCA/IG0gKyAobSA9PSAxID8gXCIgbWludXRlLCBcIiA6IFwiIG1pbnV0ZXMsIFwiKSA6IFwiXCJcbiAgICB2YXIgc0Rpc3BsYXkgPSBzID4gMCA/IHMgKyAocyA9PSAxID8gXCIgc2Vjb25kXCIgOiBcIiBzZWNvbmRzXCIpIDogXCJcIlxuICAgIHJldHVybiBoRGlzcGxheSArIG1EaXNwbGF5ICsgc0Rpc3BsYXlcbiAgfVxuXG4gIGNsZWFyQ29tbWVudElkRnJvbVVybCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfVxuICAgIGRlbGV0ZSBjdXJyZW50UXVlcnlQYXJhbXMuY29tbWVudElkXG4gICAgdGhpcy5jb21tZW50SWQgPSAnJ1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUVucm9sbG1lbnRFbGlnaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHZhbGlkYXRlIGlmIHVzZXIgaXMgbm90IGFscmVhZHkgZW5yb2xsZWQgYW5kIGNvbnRlbnQgaXMgYXZhaWxhYmxlXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlckV4dENvdXJzZUVucm9sbCkubGVuZ3RoID09PSAwICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhICYmIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRJZCAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50UGFydG5lciAmJiB0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50UGFydG5lci5pZCkge1xuICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IHRydWVcbiAgICAgIHRoaXMuY2VydFN2Yy52YWxpZGF0ZUVucm9sbG1lbnRFbGlnaWJpbGl0eSh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YS5jb250ZW50SWQsIHRoaXMuZXh0Q29udGVudFJlYWREYXRhLmNvbnRlbnRQYXJ0bmVyLmlkKS5zdWJzY3JpYmUoXG4gICAgICAgIChfcmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZW5yb2xsVmFsaWRhdGlvbkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuY2FuRW5yb2xsID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihlcnJvcj8uZXJyb3I/LnBhcmFtcz8ubXNnIHx8ICdVbmFibGUgdG8gdmFsaWRhdGUgZW5yb2xsbWVudCBlbGlnaWJpbGl0eScsICdYJywge1xuICAgICAgICAgICAgZHVyYXRpb246IDEwMDAwLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5lbnJvbGxWYWxpZGF0aW9uTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5jYW5FbnJvbGwgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9XG4gIHNob3dCYWRnZUljb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmFkZ2VEZXRhaWxzID0gdGhpcy5leHRDb250ZW50UmVhZERhdGE/LmJhZGdlRGV0YWlsc192MVxuICAgIGlmICghYmFkZ2VEZXRhaWxzIHx8ICFiYWRnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgYmFkZ2UgPSBiYWRnZURldGFpbHNbMF1cbiAgICAvLyBJZiBiYWRnZUVhcm5pbmdEYXRlRW5hYmxlZCBpcyBmYWxzZSwgZG9uJ3Qgc2hvdyBiYWRnZVxuICAgIGlmICghYmFkZ2UuYmFkZ2VFYXJuaW5nRGF0ZUVuYWJsZWQpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIElmIGJhZGdlRWFybmluZ0RhdGVFbmFibGVkIGlzIHRydWUsIHNob3cgYmFkZ2Ugb25seSBpZiBiYWRnZUVhcm5pbmdEYXRlVGltZSBoYXMgcGFzc2VkXG4gICAgaWYgKGJhZGdlPy5iYWRnZUVhcm5pbmdEYXRlRW5hYmxlZCAmJiBiYWRnZT8uYmFkZ2VFYXJuaW5nRGF0ZVRpbWUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGJhZGdlLmJhZGdlRWFybmluZ0RhdGVUaW1lLCBEYXRlLm5vdygpKVxuICAgICAgcmV0dXJuIGJhZGdlLmJhZGdlRWFybmluZ0RhdGVUaW1lID4gRGF0ZS5ub3coKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBnZXQgc2hvd0Vucm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPT09IDAgJiZcbiAgICAgICF0aGlzLmVucm9sbFZhbGlkYXRpb25Mb2FkaW5nICYmXG4gICAgICB0aGlzLmNhbkVucm9sbCAmJlxuICAgICAgXy5nZXQodGhpcy5leHRDb250ZW50UmVhZERhdGEsICdjb250ZW50UGFydG5lci5pc0FjdGl2ZScsIGZhbHNlKVxuICB9XG5cbiAgZ2V0IHNob3dSZWRpcmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy51c2VyRXh0Q291cnNlRW5yb2xsKS5sZW5ndGggPiAwICYmXG4gICAgICBfLmdldCh0aGlzLmV4dENvbnRlbnRSZWFkRGF0YSwgJ3JlZGlyZWN0VXJsJykgJiZcbiAgICAgIF8uZ2V0KHRoaXMuZXh0Q29udGVudFJlYWREYXRhLCAnY29udGVudFBhcnRuZXIuaXNBY3RpdmUnLCBmYWxzZSlcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0Q29udGVudEF2YWlsYWJsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0b2MtYmFubmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC02IGZpeGVkLXdpZHRoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLWRldGFpbHMgdG9jLWNvbnRlbnRcIiAjYmFubmVyRGV0YWlscz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEzMnB4J1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzE0MHB4J1wiIFtoZWlnaHRdPVwiJzI0cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyB0YWctZGl2IHJvdW5kZWQtMnhsIGdhcC0xIGl0ZW1zLWNlbnRlciBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LW9yYW5nZS10ZXh0XCI+dmlkZW9fbGlicmFyeTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY291cnNlQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtYm9sZCB0ZXh0LXdoaXRlIGxlYWRpbmctM1wiPnt7IHRyYW5zbGF0ZUxhYmVsKGNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5LCAnc2VhcmNoZmlsdGVycycpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy50b3BpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHMgZm9udC1ib2xkIHRleHQtd2hpdGUgbGVhZGluZy0zXCI+e3sgJ0V4dGVybmFsIENvdXJzZScgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdGV4dC13aGl0ZSBtb2Itc2hhcmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKGNsaWNrKT1cIm9uQ2xpY2tPZlNoYXJlKClcIj5zaGFyZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gS25vd2xlZGdlIGxldmVsIGJsb2NrIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia25vd2xlZGdlLWxldmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5kaWZmaWN1bHR5TGV2ZWw/LnRvTG93ZXJDYXNlKCkgPT09ICdiZWdpbm5lcicgfHwgZXh0Q29udGVudFJlYWREYXRhPy5rbm93bGVkZ2VMZXZlbD8udG9Mb3dlckNhc2UoKSA9PT0gJ2JlZ2lubmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGV2ZWwtYmFkZ2UgYmVnaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCIjREJGNERDXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk03LjQyMjY3IDVDNy42NzkyNyA0LjU1NTU1IDguMzIwNzcgNC41NTU1NiA4LjU3NzM3IDVMMTIuMDQxNSAxMUMxMi4yOTgxIDExLjQ0NDQgMTEuOTc3MyAxMiAxMS40NjQxIDEySDQuNTM1OTJDNC4wMjI3MiAxMiAzLjcwMTk3IDExLjQ0NDQgMy45NTg1NyAxMUw3LjQyMjY3IDVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ5Qzk1MVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2V4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnaW50ZXJtZWRpYXRlJyB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnaW50ZXJtZWRpYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGV2ZWwtYmFkZ2UgaW50ZXJtZWRpYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiI0QxREJFQ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NyAyLjY2NjY2QzcuNjc5MjcgMi4yMjIyMSA4LjMyMDc3IDIuMjIyMjEgOC41NzczNyAyLjY2NjY2TDEyLjA0MTUgOC42NjY2NkMxMi4yOTgxIDkuMTExMSAxMS45NzczIDkuNjY2NjYgMTEuNDY0MSA5LjY2NjY2SDQuNTM1OTJDNC4wMjI3MiA5LjY2NjY2IDMuNzAxOTcgOS4xMTExIDMuOTU4NTcgOC42NjY2Nkw3LjQyMjY3IDIuNjY2NjZaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzFCNENBMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NyA1LjY2NjY2QzcuNjc5MjcgNS4yMjIyMSA4LjMyMDc3IDUuMjIyMjEgOC41NzczNyA1LjY2NjY2TDEyLjA0MTUgMTEuNjY2N0MxMi4yOTgxIDEyLjExMTEgMTEuOTc3MyAxMi42NjY3IDExLjQ2NDEgMTIuNjY2N0g0LjUzNTkyQzQuMDIyNzIgMTIuNjY2NyAzLjcwMTk3IDEyLjExMTEgMy45NTg1NyAxMS42NjY3TDcuNDIyNjcgNS42NjY2NlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUI0Q0ExXCIgc3Ryb2tlPVwiI0QxREJFQ1wiIHN0cm9rZS13aWR0aD1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2V4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uZGlmZmljdWx0eUxldmVsPy50b0xvd2VyQ2FzZSgpID09PSAnYWR2YW5jZWQnIHx8IGV4dENvbnRlbnRSZWFkRGF0YT8ua25vd2xlZGdlTGV2ZWw/LnRvTG93ZXJDYXNlKCkgPT09ICdhZHZhbmNlZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxldmVsLWJhZGdlIGFkdmFuY2VkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCIjRkZFNkUxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgMi4zMzMzNEM3LjY3OTI0IDEuODg4OSA4LjMyMDc0IDEuODg4OSA4LjU3NzM0IDIuMzMzMzRMMTIuMDQxNCA4LjMzMzM0QzEyLjI5OCA4Ljc3Nzc5IDExLjk3NzMgOS4zMzMzNCAxMS40NjQxIDkuMzMzMzRINC41MzU4OUM0LjAyMjY5IDkuMzMzMzQgMy43MDE5NCA4Ljc3Nzc5IDMuOTU4NTQgOC4zMzMzNEw3LjQyMjY0IDIuMzMzMzRaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy40MjI2NCA1QzcuNjc5MjQgNC41NTU1NSA4LjMyMDc0IDQuNTU1NTYgOC41NzczNCA1TDEyLjA0MTQgMTFDMTIuMjk4IDExLjQ0NDQgMTEuOTc3MyAxMiAxMS40NjQxIDEySDQuNTM1ODlDNC4wMjI2OSAxMiAzLjcwMTk0IDExLjQ0NDQgMy45NTg1NCAxMUw3LjQyMjY0IDVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGRjgyNjhcIiBzdHJva2U9XCIjRkZFNkUxXCIgc3Ryb2tlLXdpZHRoPVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTcuNDIyNjQgNy42NjY2OUM3LjY3OTI0IDcuMjIyMjQgOC4zMjA3NCA3LjIyMjI0IDguNTc3MzQgNy42NjY2OUwxMi4wNDE0IDEzLjY2NjdDMTIuMjk4IDE0LjExMTEgMTEuOTc3MyAxNC42NjY3IDExLjQ2NDEgMTQuNjY2N0g0LjUzNTg5QzQuMDIyNjkgMTQuNjY2NyAzLjcwMTk0IDE0LjExMTEgMy45NTg1NCAxMy42NjY3TDcuNDIyNjQgNy42NjY2OVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0ZGODI2OFwiIHN0cm9rZT1cIiNGRkU2RTFcIiBzdHJva2Utd2lkdGg9XCIwLjVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIndoaXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmRpZmZpY3VsdHlMZXZlbCB8fCBleHRDb250ZW50UmVhZERhdGE/Lmtub3dsZWRnZUxldmVsfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJza2VsZXRvbkxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInOTAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCBibHVlLTItbG9hZGVyJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzcwJSdcIiBbaGVpZ2h0XT1cIiczMnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLXRleHQgdGV4dC1iYXNlIHNtOnRleHQtNHhsIGxlYWRpbmctNiBzbTpsZWFkaW5nLTEwIGZvbnQtYm9sZFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNhcGl0YWxpemUoZXh0Q29udGVudFJlYWREYXRhPy5uYW1lKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAgY2xhc3M9XCJrbm93bGVkZ2UtbGV2ZWwtY29udGFpbmVyIGJhZGdlZGl2XCI+IC0tPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93QmFkZ2VJY29uKClcIiBjbGFzcz1cImN1c3RvbS1iYWRnZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYmFkZ2UtaW1nIHctNSBoLTVcIiBzcmM9XCJ7eyBleHRDb250ZW50UmVhZERhdGE/LmJhZGdlRGV0YWlsc192MT8uWzBdPy5iYWRnZVRlbXBsYXRlIHwgcGlwZVB1YmxpY1VSTCB9fVwiIGFsdD1cIlwiIHNyY3NldD1cIlwiPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBzbTp0ZXh0LWJhc2Ugc291cmNlLXRleHQgZm9udC1zZW1pYm9sZCBicmVhay13b3Jkc1wiICNjb250ZW50U291cmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc291cmNlRWxsaXBzaXMnOiBzb3VyY2VFbGxpcHNpc31cIiB0aXRsZT1cInt7Y29udGVudD8uc291cmNlfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NhcmRjb250ZW50djIuYnknIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImV4dENvbnRlbnRSZWFkRGF0YT8uY291cnNlUHJvdmlkZXI/Lmxlbmd0aDtlbHNlIGNvbnRlbnRQYXJ0bmVyTmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdGNvdXJzZVByb3ZpZGVycyhleHRDb250ZW50UmVhZERhdGE/LmNvdXJzZVByb3ZpZGVyKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50UGFydG5lck5hbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tleHRDb250ZW50UmVhZERhdGE/LmNvbnRlbnRQYXJ0bmVyPy5jb250ZW50UGFydG5lck5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tb24ua2FybWF5b2dpQmhhcmF0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMTIwcHgnXCIgW2hlaWdodF09XCInNDBweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzg4cHgnXCIgW2hlaWdodF09XCInMjRweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiICpuZ0lmPVwiY29udGVudD8uYXZlcmFnZVJhdGluZyB8fCBjb250ZW50Py5hZGRpdGlvbmFsVGFncz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHJhdGluZy1jaGlwIHB5LTIgaXRlbXMtY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImhhbmRsZU5hdmlnYXRlVG9SZXZpZXdzKClcIiAqbmdJZj1cImNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgbWFyZ2luLWxlZnQtcyBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncmFkZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC13aGl0ZSB0ZXh0LXNtIGxlYWRpbmctNFwiPnt7IGNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtd2hpdGUgdGV4dC1zbSBsZWFkaW5nLTQgbWFyZ2luLXJpZ2h0LW1cIj57eyBjb250ZW50Py50b3RhbFJhdGluZyB8IHBpcGVDb3VudFRyYW5zZm9ybSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjb250ZW50Py5hZGRpdGlvbmFsVGFncz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3N0LWVucm9sbGVkLWNoaXAgdGV4dC14cyBsZWFkaW5nLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29udGVudD8uYWRkaXRpb25hbFRhZ3M/LmluY2x1ZGVzKCdtb3N0VHJlbmRpbmcnKVwiPnt7ICdjYXJkY29udGVudHYyLm1vc3RUcmVuZGluZycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnQ/LmFkZGl0aW9uYWxUYWdzPy5pbmNsdWRlcygnbW9zdEVucm9sbGVkJylcIj57eyAnY2FyZGNvbnRlbnR2Mi5tb3N0RW5yb2xsZWQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzE4MHB4J1wiIFtoZWlnaHRdPVwiJzIwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkIGJsdWUtMi1sb2FkZXInXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFza2VsZXRvbkxvYWRlciAmJiBleHRDb250ZW50UmVhZERhdGE/Lmxhc3RVcGRhdGVkT25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIGxlYWRpbmctNCBzb3VyY2UtdGV4dFwiPih7eyAnYXBwdG9jLmxhc3RVcGRhdGVkT24nIHwgdHJhbnNsYXRlIH19IHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0Q29udGVudFJlYWREYXRhPy5sYXN0VXBkYXRlZE9uIHwgZGF0ZTogJ01NTSBkLCB5JyB9fSk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmb3JQcmV2aWV3XCI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTW9iaWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBwLTUgYm9yZGVyLWJvdHRvbSBwb3NpdGlvbi1ib3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIHctZnVsbCB3cy1tYXQtYmxhY2stdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keS0yICB3cy1tYXQtYmxhY2stdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3N9fSU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWNvbnRlbnQtcHJvZ3Jlc3MgW2NvbnRlbnRJZF09XCJ1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvZ3Jlc3NdPVwidXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2dyZXNzVHlwZV09XCIncGVyY2VudGFnZSdcIiBbY3VzdG9tQ2xhc3NOYW1lXT1cIid2aWV3ZXItcHJvZ3Jlc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3Mtd2lkZ2V0LWNvbnRlbnQtcHJvZ3Jlc3M+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Vucm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuUm9sbFRvRXh0Q291cnNlKGV4dENvbnRlbnRSZWFkRGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbnJvbGxWYWxpZGF0aW9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlciBbd2lkdGhdPVwiJzEzMnB4J1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQgYmx1ZS0yLWxvYWRlcidcIj48L3dzLXdpZGdldC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dSZWRpcmVjdFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbiBqdXN0aWZ5LWNlbnRlciBmbGV4LW1pZGRsZSByZXN1bWVcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZXh0Q29udGVudFJlYWREYXRhPy5yZWRpcmVjdFVybFwiIChjbGljayk9XCJjYXB0dXJlUmVkaXJlY3RUZWxlbWV0cnkoZXh0Q29udGVudFJlYWREYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj57eyAnYXBwdG9jaG9tZS5yZWRpcmVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtbC0yIHdzLW1hdC13aGl0ZS10ZXh0XCI+b3Blbl9pbl9uZXc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgJiYgdXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPT09IDEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uIGp1c3RpZnktY2VudGVyIGZsZXgtbWlkZGxlIHJlc3VtZVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZG93bmxvYWRDZXJ0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImZ1c2lvbi1hc3NldHMvaW1hZ2VzL2NlcnRpZmljYXRlLWljby5zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNlcnRpZmljYXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICAqbmdJZj1cIiFkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZ1wiIGNsYXNzPVwibWwtMlwiPmFycm93X2Rvd253YXJkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZW50ZXIgZmxleCBmbGV4LW1pZGRsZSBjZXJ0aWZpY2F0ZS1sb2FkZXIgbWFyZ2luLWxlZnQtc1wiICpuZ0lmPVwiZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlPVwiJ3doaXRlJ1wiIGNsYXNzPVwid2hpdGUtc3Bpbm5lclwiIFtkaWFtZXRlcl09XCIyNFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIC0tPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2sgbWQ6aGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpblByb2dyZXNzSW5mb1wiID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcHgtOCBweS00IGdhcC0yXCIgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmR1cmF0aW9uID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWNvbnMvdG9jL3RpbWVyLnN2Z1wiIHdpZHRoPVwiMjBweFwiIGFsdD1cIndlYiBpbWFnZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzXCI+e3sgZXh0Q29udGVudFJlYWREYXRhPy5kdXJhdGlvbiAqIDYwIHwgcGlwZUR1cmF0aW9uVHJhbnNmb3JtOiAnaG1zJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC02IGZpeGVkLXdpZHRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2MtY29udGVudFwiIFtuZ0NsYXNzXT1cImlzTW9iaWxlID8gJyc6J210LTggbWItOCdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiLWdyb3VwPlxuICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYWJvdXQnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIiBbbmdDbGFzc109XCJpc01vYmlsZSA/ICcnOidtdC01IG1iLTUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInODBweCdcIiBbaGVpZ2h0XT1cIicxNnB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluZGluZ0NsYXNzXT1cIidyb3VuZGVkJ1wiPjwvd3Mtd2lkZ2V0LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic4MCUnXCIgW2hlaWdodF09XCInMTZweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic5NSUnXCIgW2hlaWdodF09XCInMTZweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIic2NSUnXCIgW2hlaWdodF09XCInMTZweCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXBwLXRvYy1hYm91dCBbY29udGVudFJlYWREYXRhXT1cImV4dENvbnRlbnRSZWFkRGF0YVwiIFtzaG93UmV2aWV3c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmFzZUNvbnRlbnRSZWFkRGF0YV09XCJleHRDb250ZW50UmVhZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dNYXJrZXRQbGFjZUNlcnRpZmljYXRlXT1cIih1c2VyRXh0Q291cnNlRW5yb2xsIHwganNvbikgIT09ICd7fScgJiYgdXNlckV4dENvdXJzZUVucm9sbD8uaXNzdWVkX2NlcnRpZmljYXRlcz8ubGVuZ3RoID4gIDAgJiYgdXNlckV4dENvdXJzZUVucm9sbD8ucHJvZ3Jlc3MgPT09IDEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJleHRDb250ZW50UmVhZERhdGFcIiBbZnJvbU1hcmtldFBsYWNlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NrZWxldG9uTG9hZGVyXT1cInNrZWxldG9uTG9hZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcm9tTURPXT1cImZyb21NRE9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXBwLXRvYy1hYm91dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWc/LmNvbW1lbnRzVGFiXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2UuY29tbWVudHMnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cImNvbW1lbnRzRGl2XCIgKm5nSWY9XCJkaXNjdXNzV2lkZ2V0RGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tbWVudElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkLXYyLXdpZGdldC1jb21tZW50IFt3aWRnZXREYXRhXT1cImRpc2N1c3NXaWRnZXREYXRhXCI+PC9kLXYyLXdpZGdldC1jb21tZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTMgY3Vyc29yLXBvaW50ZXIgbWItNVwiIChjbGljayk9XCJjbGVhckNvbW1lbnRJZEZyb21VcmwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgdG8gYWxsIGNvbW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZC12Mi13aWRnZXQtY29tbWVudCBbd2lkZ2V0RGF0YV09XCJkaXNjdXNzV2lkZ2V0RGF0YVwiIFtjb21tZW50SWRdPVwiY29tbWVudElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza2VsZXRvbkxvYWRlcl0+PC9kLXYyLXdpZGdldC1jb21tZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9uZy10ZW1wbGF0ZT4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRlbnRcIiAjcmlnaHRDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNrZWxldG9uTG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyIFt3aWR0aF09XCInMzg0cHgnXCIgW2hlaWdodF09XCInMjI0cHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kaW5nQ2xhc3NdPVwiJ3JvdW5kZWQnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2tlbGV0b25Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaW1hZ2UtZGl2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgZXh0Q29udGVudFJlYWREYXRhPy5hcHBJY29uICsgJyknLCAnYmFja2dyb3VuZC1yZXBlYXQnOiAnbm8tcmVwZWF0JywgJ2JhY2tncm91bmQtc2l6ZSc6ICdjb3Zlcid9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW1hZ2UtYmFja2Ryb3AnOiBzY3JvbGxlZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiB0ZXh0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbkNsaWNrT2ZTaGFyZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTIgc2hhcmUtdGFnXCIgKm5nSWY9XCIhZm9yUHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNoYXJlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgJ2FwcHRvY3NpbmdsZXBhZ2Uuc2hhcmUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCIgKm5nSWY9XCJzY3JvbGxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14bCBsZWFkaW5nLTYgdGV4dC13aGl0ZSBmb250LWJvbGQgdGV4dC1zY3JvbC1jdXN0b21cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2FwaXRhbGl6ZShleHRDb250ZW50UmVhZERhdGE/Lm5hbWUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHNvdXJjZS10ZXh0IGZvbnQtc2VtaWJvbGQgYnJlYWstd29yZHNcIiAjY29udGVudFNvdXJjZSBbbmdDbGFzc109XCJ7J3NvdXJjZUVsbGlwc2lzJzogc291cmNlRWxsaXBzaXN9XCIgdGl0bGU9XCJ7e2NvbnRlbnQ/LnNvdXJjZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2FyZGNvbnRlbnR2Mi5ieScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lXCI+e3sgZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZXh0Q29udGVudFJlYWREYXRhPy5jb250ZW50UGFydG5lcj8uY29udGVudFBhcnRuZXJOYW1lXCI+e3sgJ2NvbW1vbi5rYXJtYXlvZ2lCaGFyYXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9yUHJldmlld1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMyBwLTMgYm9yZGVyLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiKHVzZXJFeHRDb3Vyc2VFbnJvbGwgfCBqc29uKSAhPT0gJ3t9J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgdy1mdWxsIHdzLW1hdC1ibGFjay10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keS0yICB3cy1tYXQtYmxhY2stdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3VzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzfX0lPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWNvbnRlbnQtcHJvZ3Jlc3MgW2NvbnRlbnRJZF09XCJ1c2VyRXh0Q291cnNlRW5yb2xsPy5wcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Byb2dyZXNzXT1cInVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJvZ3Jlc3NUeXBlXT1cIidwZXJjZW50YWdlJ1wiIFtjdXN0b21DbGFzc05hbWVdPVwiJ3ZpZXdlci1wcm9ncmVzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd3Mtd2lkZ2V0LWNvbnRlbnQtcHJvZ3Jlc3M+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAgIC0tPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Vucm9sbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlblJvbGxUb0V4dENvdXJzZShleHRDb250ZW50UmVhZERhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+e3sgJ2FwcHRvY2hvbWUuZW5yb2xsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVucm9sbFZhbGlkYXRpb25Mb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1za2VsZXRvbi1sb2FkZXIgW3dpZHRoXT1cIicxMDAlJ1wiIFtoZWlnaHRdPVwiJzMycHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRpbmdDbGFzc109XCIncm91bmRlZCAnXCI+PC93cy13aWRnZXQtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1JlZGlyZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiZXh0Q29udGVudFJlYWREYXRhPy5yZWRpcmVjdFVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXB0dXJlUmVkaXJlY3RUZWxlbWV0cnkoZXh0Q29udGVudFJlYWREYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPnt7ICdhcHB0b2Nob21lLnJlZGlyZWN0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWwtMiB3cy1tYXQtd2hpdGUtdGV4dFwiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCIodXNlckV4dENvdXJzZUVucm9sbCB8IGpzb24pICE9PSAne30nICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/Lmlzc3VlZF9jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHVzZXJFeHRDb3Vyc2VFbnJvbGw/LnByb2dyZXNzID09PSAxMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b24ganVzdGlmeS1jZW50ZXIgZmxleC1taWRkbGUgcmVzdW1lXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkb3dubG9hZENlcnQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiZnVzaW9uLWFzc2V0cy9pbWFnZXMvY2VydGlmaWNhdGUtaWNvLnN2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkNlcnRpZmljYXRlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAgKm5nSWY9XCIhZG93bmxvYWRDZXJ0aWZpY2F0ZUxvYWRpbmdcIiBjbGFzcz1cIm1sLTJcIj5hcnJvd19kb3dud2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbnRlciBmbGV4IGZsZXgtbWlkZGxlIGNlcnRpZmljYXRlLWxvYWRlciBtYXJnaW4tbGVmdC1zXCIgKm5nSWY9XCJkb3dubG9hZENlcnRpZmljYXRlTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCIgc3Ryb2tlPVwiJ3doaXRlJ1wiIGNsYXNzPVwid2hpdGUtc3Bpbm5lclwiIFtkaWFtZXRlcl09XCIyNFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImluUHJvZ3Jlc3NJbmZvXCIgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGtwaS12YWx1ZXMgaXRlbXMtY2VudGVyIGdhcC0yXCIgKm5nSWY9XCJleHRDb250ZW50UmVhZERhdGE/LmR1cmF0aW9uID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ljb25zL3RvYy90aW1lci5zdmdcIiB3aWR0aD1cIjIwcHhcIiBhbHQ9XCJ3ZWIgaW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBleHRDb250ZW50UmVhZERhdGE/LmR1cmF0aW9uIHwgcGlwZUR1cmF0aW9uVHJhbnNmb3JtOiAnaG1zJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48ZGl2ICpuZ0lmPVwiIWV4dENvbnRlbnRBdmFpbGFibGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciB3LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hcmdpbi14bCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2NvbW1vbi9lcnJvci1wYWdlcy9lbXB0eV9zZWFyY2guc3ZnXCIgd3NVdGlsc0ltYWdlUmVzcG9uc2l2ZSBhbHQ9XCJObyByZXN1bHRzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi10b3AtbCBtYXJnaW4tYm90dG9tLXNcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC1oMlwiIGkxOG49XCJzZWFyY2ggcm91dGUgbm8gcmVzdWx0XCI+e3snbGVhcm5zZWFyY2gubm9SZXN1bHRzJyB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG48d3MtYXBwLXNoYXJlLXRvYyAqbmdJZj1cImVuYWJsZVNoYXJlXCIgW2NvbnRlbnRMaW5rXT1cImNvbnRlbnRMaW5rXCIgW3Jvb3RPcmdJZF09XCJyb290T3JnSWRcIiBbY29udGVudF09XCJleHRDb250ZW50UmVhZERhdGFcIlxuICAgIChyZXNldEVuYWJsZVNoYXJlKT1cInJlc2V0RW5hYmxlU2hhcmUoJGV2ZW50KVwiPjwvd3MtYXBwLXNoYXJlLXRvYz5cblxuPG5nLXRlbXBsYXRlICNpblByb2dyZXNzSW5mbz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Byb3ZpZGVyVGlwc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tY2VydGlmaWNhdGUtZm91bmQgbXQtNiBtYi00IG14LTIgcC0yXCIgPlxuICAgICAgICAgICAgPHdzLXdpZGdldC1zbGlkZXJzLWR5bmFtaWMgW3dpZGdldERhdGFdPVwid2lkZ2V0RGF0YVwiPjwvd3Mtd2lkZ2V0LXNsaWRlcnMtZHluYW1pYz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==