game-lobby-lib 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -393,11 +393,11 @@ export class CasinoLobbyComponent {
|
|
|
393
393
|
this.gameClicked.emit(gameCode);
|
|
394
394
|
}
|
|
395
395
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CasinoLobbyComponent, deps: [{ token: i1.GameLobbyThemeService }, { token: i2.GameLobbyLibService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
396
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CasinoLobbyComponent, isStandalone: true, selector: "lib-casino-lobby", inputs: { casinoData: "casinoData", theme: "theme", baseUrl: "baseUrl", brandConfig: "brandConfig" }, outputs: { gameClicked: "gameClicked" }, viewQueries: [{ propertyName: "swiperContainer", first: true, predicate: ["swiperContainer"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "gameSwiperContainers", predicate: ["gameSwiperContainer"], descendants: true }], ngImport: i0, template: "<div class=\"lobby_main-lobby\">\r\n <div class=\"lobby_game-filter-background\" [ngStyle]=\"{ 'background': theme?.background || 'none' }\">\r\n <!-- Main Filter Section -->\r\n <div class=\"lobby_fixed-footer-width lobby_clearfix\" [ngStyle]=\"{ 'border-bottom': theme?.borderSearch || 'none' }\">\r\n <div class=\"display-filter-content\">\r\n <!-- Search Bar -->\r\n <div class=\"lobby_searchBar\">\r\n <div class=\"lobby_game-search\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\">\r\n <form class=\"lobby_form-inline\" (submit)=\"$event.preventDefault()\">\r\n <i class=\"fa fa-search\"></i>\r\n <input #searchInput class=\"lobby_game-search-form\" id=\"searchInput\" name=\"gameSearch\" type=\"text\" placeholder=\"GAME SEARCH\"\r\n aria-label=\"Search\" (input)=\"onSearchChange($event)\" />\r\n </form>\r\n </div>\r\n\r\n <!-- Provider Swiper -->\r\n <div class=\"lobby_swiperContainer\">\r\n <swiper-container #swiperContainer *ngIf=\"providerList && providerList.length\"\r\n slides-per-view=\"1\" space-between=\"6\" speed=\"50\" [loop]=\"shouldLoopProviders()\"\r\n navigation=\"false\" css-mode=\"true\" [breakpoints]=\"{\r\n '100': { slidesPerView: 3 },\r\n '200': { slidesPerView: 4 },\r\n '320': { slidesPerView: 4 },\r\n '480': { slidesPerView: 6 },\r\n '768': { slidesPerView: 8 },\r\n '991': { slidesPerView: 10 },\r\n '1280': { slidesPerView: 12 }\r\n }\">\r\n <swiper-slide *ngFor=\"let provider of providerList\">\r\n <div class=\"lobby_provider-slide-item\">\r\n <img [src]=\"brandConfig?.providersIconsDir + '/' + provider.vendorCode + '.svg'\"\r\n [alt]=\"provider.name\" (click)=\"filterProviderGames(0, provider.vendorCode)\"\r\n loading=\"lazy\" />\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n\r\n <!-- Navigation buttons - OUTSIDE .swiperContainer but INSIDE .searchBar -->\r\n <div class=\"swiper-navigation-row\">\r\n <button class=\"swiper-button-prev\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Previous providers\">\r\n <span class=\"icon-arrow-left-games\"></span>\r\n </button>\r\n\r\n <button class=\"swiper-button-next\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Next providers\">\r\n <span class=\"icon-arrow-right-games\"></span>\r\n </button>\r\n </div>\r\n <div class=\"game-provider\">\r\n <div class=\"desktop\">\r\n <ul class=\"f-tabs providerIcons-ul-desktop\">\r\n <li id=\"favouriteIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterFavouriteGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Favorite Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-heart\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Recent Games Icon -->\r\n <li id=\"recentGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterLastPlayedGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Last played Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-clock\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Hot Games Icon -->\r\n <li id=\"hotGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterHotGames(0, 'hot')\">\r\n <div id=\"hotGamestt\" style=\"display: none; margin-left: -23px\"\r\n class=\"ttip ttip-arrow\">\r\n Hot Games\r\n <span class=\"arrow-down\" style=\"margin-left: -35px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"hotGames\">\r\n <i class=\"fa fa-fire\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Game Category Dropdown -->\r\n <li id=\"gameCategory\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"game-category-link game-category-link-desktop hidden-xs hidden-sm display-filter-content\">\r\n <a type=\"button\" class=\"category-btn\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"toggleGameCategoryTop()\">\r\n {{ categoryLabel }}\r\n </a>\r\n <a type=\"button\" id=\"gameCategoryLink\" [ngClass]=\"{\r\n 'icon-angle-down': !categoryChosen,\r\n 'icon-close': categoryChosen,\r\n 'pull-right': true\r\n }\" aria-label=\"Toggle category menu\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"categoryChosen ? DropdownClose() : toggleGameCategoryTop()\"></a>\r\n\r\n <!-- Game Category Dropdown Menu (positioned directly below) -->\r\n <div id=\"gameCategoryTop\"\r\n class=\"clearfix game-category-list game-category-list-footer\"\r\n [style.display]=\"showGameCategoryTop ? 'block' : 'none'\">\r\n <div class=\"game-category-list-width\">\r\n <ul class=\"game-category-list-item\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.background || '#262626',\r\n 'border': theme?.border || 'none'\r\n }\">\r\n <li class=\"game-category-list-item-li\" *ngFor=\"let group of lobbyGames\"\r\n id=\"{{group.gameGroupDetails.id}}-LeftSideButton-footer\"\r\n (click)=\"categoryLabel = group.gameGroupDetails.name; filterGroupGames(0, group.gameGroupDetails.id)\">\r\n {{ group.gameGroupDetails.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Games Section -->\r\n <div class=\"games-background\" id=\"gamesLobby\" *ngIf=\"!filterActive\">\r\n <div *ngFor=\"let group of lobbyGames; let i = index\" class=\"games-section\">\r\n <div class=\"new-game-header\">\r\n <h3 [ngStyle]=\"{ 'color': theme?.textColor || '#FFFFFF' }\">{{group.gameGroupDetails.name}}</h3>\r\n <div>\r\n <a class=\"btn-newgamestrip\" [ngStyle]=\"{ 'border': (theme?.borderSearch || 'none'),\r\n 'background-color': hoveredViewAllIndex === i ? (theme?.buttonBackgroundColor || '') : (theme?.background || '#262626')\r\n }\" (click)=\"viewGameCategory(group.gameGroupDetails)\" (mouseenter)=\"hoveredViewAllIndex = i\"\r\n (mouseleave)=\"hoveredViewAllIndex = null\">VIEW ALL</a>\r\n <a class=\"btn-Arrow-left\" [ngClass]=\"{ 'pulse': pulsingButton === 'prev' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'prev' + i ? (theme?.borderSearch || 'none'):'1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Previous games\"\r\n (click)=\"triggerPulse('prev' + i); slidePrev(i)\" (mouseenter)=\"hoveredButton = 'prev' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-left\"></span>\r\n </a>\r\n <a class=\"btn-Arrow-right\" [ngClass]=\"{ 'pulse': pulsingButton === 'next' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'next' + i ? (theme?.borderSearch || 'none') : '1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Next games\"\r\n (click)=\"triggerPulse('next' + i); slideNext(i)\" (mouseenter)=\"hoveredButton = 'next' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-right\"></span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"swiperContainer\">\r\n <div style=\"overflow-x: auto; white-space: nowrap; width: 100%;\">\r\n <swiper-container #gameSwiperContainer *ngIf=\"group.games && group.games.length\" slides-per-view=\"1\"\r\n space-between=\"10\" speed=\"50\" [loop]=\"shouldLoopGamesForGroup(group.games)\" navigation=\"false\"\r\n css-mode=\"false\" [breakpoints]=\"{\r\n '190': { slidesPerView: 1, spaceBetween: 10 },\r\n '350': { slidesPerView: 2, spaceBetween: 10 },\r\n '520': { slidesPerView: 3, spaceBetween: 10 },\r\n '676': { slidesPerView: 4, spaceBetween: 10 },\r\n '834': { slidesPerView: 4, spaceBetween: 10 },\r\n '998': { slidesPerView: 5, spaceBetween: 10 },\r\n '1158': { slidesPerView: 6, spaceBetween: 10 },\r\n '1280': { slidesPerView: 6, spaceBetween: 10 }\r\n }\">\r\n <swiper-slide *ngFor=\"let game of group.games; let gameIndex = index\"\r\n [attr.data-game-id]=\"i + '-' + game.gameCode\" class=\"lobby_games-home\">\r\n <div class=\"game-card\">\r\n <div class=\"game-card__content\"\r\n (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\"\r\n *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\"\r\n (click)=\"getgameClicked(game.gameCode)\"\r\n style=\"cursor: pointer;\"\r\n >\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\"\r\n (error)=\"onImageError($event)\" [alt]=\"game.name\" loading=\"lazy\"\r\n [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name\r\n }}</span></div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Filtered Games Sections-->\r\n <div class=\"games-background\" id=\"filtered-games-section\" *ngIf=\"filterActive\">\r\n <div class=\"lobby_games-row\">\r\n <div class=\"game-card\" [attr.data-game-id]=\"gameIndex + '-' + game.gameCode\"\r\n *ngFor=\"let game of filteredGames; let gameIndex = index\">\r\n <div class=\"game-card__content\" (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\" *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\" (click)=\"getgameClicked(game.gameCode)\" style=\"cursor: pointer;\">\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\" (error)=\"onImageError($event)\"\r\n [alt]=\"game.name\" loading=\"lazy\" [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name }}</span></div>\r\n </div>\r\n </div>\r\n <div class=\"lobby_loadMoreBtn\" *ngIf=\"filterShowLoadMore\">\r\n <a class=\"btn load-more-btn\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n (click)=\"loadMoreFilteredGames()\">\r\n LOAD MORE\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"games-background lobby_noGamesMessage\" id=\"noGamesMessage\" *ngIf=\"noGamesToShow\">\r\n <p>NO GAMES FOUND</p>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";*{margin:0;padding:0;box-sizing:border-box}.icon-heart-icon-01:before{content:\"\\e93c\"}.icon-heart-icon-02:before{content:\"\\2764\\fe0f\"}.icon-flame-fill:before{content:\"\\1f525\"}.icon-angle-down:before{content:\"\\25bc\"}.icon-close:before{content:\"\\2715\"}.icon-arrow-left-games:before{content:\"<\"}.icon-arrow-right-games:before{content:\">\"}.lobby_clearfix:after{content:\"\";display:table;clear:both}.pull-right{float:right}.pull-left{float:left}.hide{display:none!important}.display-filter-content{display:block;border-radius:3px;width:100%;max-width:1280px;margin:0 auto}.hide-filter-content{display:none}.lobby_main-lobby{width:1280px;width:100%;max-width:1280px;display:block;position:relative;margin:0 auto}.lobby_game-filter-background{width:100%;max-width:var(--max-content-width);display:block;position:relative;margin:0 auto;padding:0 15px;overflow:visible;position:sticky;top:0;z-index:100}@media (max-width: 1280px){.lobby_game-filter-background{padding:0 20px}}@media (max-width: 768px){.lobby_game-filter-background{padding:0 15px}}@media (max-width: 480px){.lobby_game-filter-background{padding:0 10px}}.lobby_fixed-footer-width{width:1280px;max-width:100%;margin:0 auto 5px;padding:10px 15px 10px 5px}@media (max-width: 991px){.lobby_fixed-footer-width{width:100%;padding:10px}}@media (max-width: 768px){.lobby_fixed-footer-width{padding:10px 5px}}.lobby_searchBar{display:flex;align-items:center;gap:10px;flex-wrap:nowrap}@media (max-width: 1200px){.lobby_searchBar{gap:8px}}@media (max-width: 991px){.lobby_searchBar{gap:6px}}@media (max-width: 768px){.lobby_searchBar{flex-wrap:wrap;gap:10px}}.lobby_game-search{padding:2px 6px;border-radius:3px;margin-left:0;color:#a7a9ac;font-weight:600;flex-shrink:0}@media (max-width: 991px){.lobby_game-search{margin-left:0;padding:0 15px}}@media (max-width: 768px){.lobby_game-search{width:100%;margin-left:0}}.lobby_game-search i{padding-left:15px;font-size:15px;color:#fff;position:relative;cursor:pointer}.lobby_form-inline{display:flex;align-items:center}.lobby_game-search-form{background:transparent;color:var(--footer-games-text-color);border-radius:3px;padding:2px 8px;width:160px;height:32px;text-transform:uppercase;border:none;outline:none}@media (max-width: 768px){.lobby_game-search-form{width:100%;max-width:200px}}@media (max-width: 480px){.lobby_game-search-form{font-size:14px}}.lobby_game-search-form::placeholder{color:#a7a9ac}.lobby_swiperContainer{display:flex;align-items:center;flex:1;min-width:0;max-width:100%;overflow:visible}@media (max-width: 991px){.lobby_swiperContainer{max-width:calc(100% + -0px)}}@media (max-width: 768px){.lobby_swiperContainer{width:100%;max-width:100%}}.lobby_swiperContainer swiper-container{width:100%!important;max-width:1280px;overflow:hidden}@media (max-width: 991px){.lobby_swiperContainer swiper-container{max-width:900px}}@media (max-width: 768px){.lobby_swiperContainer swiper-container{max-width:100%}}.lobby_provider-slide-item{padding:4px 7px 7px;font-size:20px;display:flex;align-items:center;justify-content:center;color:#fff}.lobby_provider-slide-item img{width:100%;height:20px;cursor:pointer;object-fit:contain;filter:brightness(0) invert(1)}@media (max-width: 480px){.lobby_provider-slide-item img{height:16px}}.swiper-navigation-row{display:flex;align-items:center;gap:10px;margin-left:10px;flex-shrink:0}@media (max-width: 768px){.swiper-navigation-row{gap:5px;margin-left:5px}}@media (max-width: 480px){.swiper-navigation-row{gap:3px;margin-left:3px}}.swiper-button-next,.swiper-button-prev{position:static!important;background:none;border:none;cursor:pointer;width:auto;height:auto;margin:0;padding:0 8px;display:flex;align-items:center}@media (max-width: 768px){.swiper-button-next,.swiper-button-prev{padding:0 4px}}.swiper-button-next:after,.swiper-button-prev:after{color:inherit}.icon-arrow-left-games,.icon-arrow-right-games{font-size:32px}@media (max-width: 768px){.icon-arrow-left-games,.icon-arrow-right-games{font-size:24px}}.swiper-button-disabled .icon-arrow-left-games,.swiper-button-disabled .icon-arrow-right-games{opacity:.4;cursor:not-allowed}.game-provider{flex-shrink:0;overflow:visible}@media (max-width: 991px){.game-provider{float:right}}@media (max-width: 768px){.game-provider{width:100%;float:none}}.f-tabs{margin:0;padding-left:10px;list-style:none;overflow:visible}@media (max-width: 768px){.f-tabs{padding-left:5px}}.f-tabs li{padding:4px 7px 7px;font-size:17px;margin-right:5px;text-transform:uppercase;color:var(--footer-games-text-color);float:left;cursor:pointer}@media (max-width: 768px){.f-tabs li{font-size:18px;padding:3px 5px 5px;margin-right:3px}}@media (max-width: 480px){.f-tabs li{font-size:16px}}.f-tabs li.btt{border:1px solid #02B0CB;border-radius:3px;margin-right:7px;padding:5px}.f-tabs li.active i{color:#02b0cb}.f-tabs li.active img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)}.f-tabs li i{color:var(--footer-games-text-color)}.f-tabs li img{height:20px;width:20px;filter:brightness(0) saturate(100%) invert(98%) sepia(99%) saturate(2%) hue-rotate(208deg) brightness(101%) contrast(100%)}@media (max-width: 768px){.f-tabs li img{height:18px;width:18px}}.f-tabs li:hover i{color:var(--footer-games-hover-color)}.f-tabs li:hover img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)!important}.providerIcons-ul-desktop{display:inline-flex;overflow:visible;width:243px;flex-shrink:0}@media (max-width: 991px){.providerIcons-ul-desktop{width:300px}}@media (max-width: 768px){.providerIcons-ul-desktop{width:100%;justify-content:flex-start}}.game-category-link{font-weight:600;color:var(--footer-games-text-color);min-width:130px;padding:5px 10px;text-align:center;font-size:15px;position:relative;overflow:visible!important}@media (max-width: 768px){.game-category-link{min-width:100px;font-size:14px;padding:4px 8px}}.desktop{display:block!important}.mobile{display:none}@media (max-width: 991px){.mobile{display:block}}.game-category-list{background-color:var(--footer-games-cat-list-bg-color);color:var(--footer-games-text-color);border-radius:3px;position:absolute;z-index:9999;top:calc(100% + 5px);right:0;left:auto;display:none;box-shadow:0 4px 8px #0000004d;min-width:260px}@media (max-width: 991px){.game-category-list{right:0;left:auto}}@media (max-width: 768px){.game-category-list{left:50%;right:auto;transform:translate(-50%);width:90vw;max-width:400px}}.game-category-list-width{width:100%;display:flex;justify-content:flex-end}.game-category-list-item{margin:0;padding:0;list-style:none;min-width:257.45px;width:auto;overflow-x:auto;white-space:nowrap;text-align:left;float:none}@media (max-width: 768px){.game-category-list-item{min-width:unset;width:100%}}.game-category-list-item-li{padding:10px 0 10px 15px;font-size:14px;text-transform:uppercase;color:var(--footer-games-text-color);cursor:pointer;font-weight:600;width:50%;float:left}.game-category-list-item-li:hover{color:var(--footer-games-hover-color)!important}.game-category-list-item-li.active{color:#fff;background:#02b0cb}.ttip{position:absolute;margin-top:-38px;border:1px solid #02B0CB;background-color:#192026;border-radius:2px;padding-left:4px;padding-right:4px;font-size:10px;z-index:99999;display:none}.arrow-down{width:0px;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #02B0CB;position:absolute;margin-top:22px}.games-background{width:100%;display:block;position:relative;margin:0 auto;padding:20px 0}@media (max-width: 1280px){.games-background{padding:20px 0}}@media (max-width: 768px){.games-background{padding:15px 0}}@media (max-width: 480px){.games-background{padding:10px 0}}.new-game-header{height:60px;border-bottom:1px solid grey;display:flex;align-items:center;margin-bottom:24px;justify-content:space-between}@media (max-width: 768px){.new-game-header{height:50px;margin-bottom:16px}}@media (max-width: 480px){.new-game-header{flex-direction:column;height:auto;padding:10px 0;align-items:flex-start;gap:10px}}.new-game-header h3{font-size:18px;font-weight:600;margin-left:10px}@media (max-width: 768px){.new-game-header h3{font-size:16px;margin-left:5px}}@media (max-width: 480px){.new-game-header h3{font-size:14px;margin-left:0}}.new-game-header>div{display:flex;align-items:center;gap:10px}@media (max-width: 480px){.new-game-header>div{width:100%;justify-content:space-between}}.btn-newgamestrip{background-color:transparent;font-weight:600;color:#fff;font-size:15px;border-radius:4px;text-align:center;text-decoration:none;width:120px!important;height:auto!important;padding:9.9px 2px!important;cursor:pointer;z-index:3;position:relative}@media (max-width: 768px){.btn-newgamestrip{font-size:13px;width:100px!important;padding:8px 2px!important}}@media (max-width: 480px){.btn-newgamestrip{font-size:12px;width:80px!important;padding:6px 2px!important}}.btn-Arrow-right,.btn-Arrow-left{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:4px}@media (max-width: 768px){.btn-Arrow-right,.btn-Arrow-left{width:30px!important;height:30px!important}}@media (max-width: 480px){.btn-Arrow-right,.btn-Arrow-left{width:25px!important;height:25px!important}}.btn-Arrow-right .arrow-icon,.btn-Arrow-left .arrow-icon{display:inline-block;width:18px;height:18px;border:.5px solid white;border-width:0 4px 4px 0;padding:3px}.btn-Arrow-right .arrow-left,.btn-Arrow-left .arrow-left{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.btn-Arrow-right .arrow-right,.btn-Arrow-left .arrow-right{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.btn-Arrow-right{background-image:url(/assets/img/BTN-arrow-right.svg)!important}.btn-Arrow-right:hover{background-image:url(/assets/img/BTN-arrow-right-hov.svg)!important}.btn-Arrow-left{background-image:url(/assets/img/BTN-arrow-left.svg)!important}.btn-Arrow-left:hover{background-image:url(/assets/img/BTN-arrow-left-hov.svg)!important}.new-game-holder{width:100%;height:auto;overflow-x:hidden;cursor:grab;margin:auto;background:none repeat scroll 0 0;position:relative}.game-card{display:flex;flex-direction:column;align-items:center;height:auto;min-height:170px;width:100%;position:relative}@media (max-width: 991px){.game-card{min-height:160px}}@media (max-width: 768px){.game-card{min-height:150px}}@media (max-width: 480px){.game-card{min-height:130px}}.game-card img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;display:block;transition:opacity .3s ease}.game-card img:hover{opacity:.2}.game-card .game-card__text{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;width:100%;min-height:50px;font-size:10px;font-weight:100;padding:10px}@media (max-width: 768px){.game-card .game-card__text{font-size:9px;padding:8px 12px;min-height:45px}}@media (max-width: 480px){.game-card .game-card__text{font-size:8px;padding:6px 10px;min-height:40px}}.game-card .game-card__text .favicon{flex:1;display:flex;justify-content:flex-start}.game-card .game-card__text .cardtext{flex:3;display:flex;justify-content:flex-start;word-break:break-word}swiper-container{--swiper-navigation-size: 20px;width:100%!important}@media (max-width: 768px){swiper-container{--swiper-navigation-size: 16px}}swiper-slide{display:flex;align-items:center;justify-content:center;height:auto!important}.img-gradient{display:inline-block}.gameimage{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.pulse{animation:pulse .4s}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.12)}to{transform:scale(1)}}.category-btn{width:160px;min-width:unset;min-height:45px;font-size:9px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon-search{font-size:10px;padding:0;color:#fff;top:0;position:relative!important;display:inline-flex!important;clear:both}.fa-clock,.fa-fire,.fa-heart{color:#fff!important;font-size:18px;vertical-align:middle}.game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.games-section{width:1280px;max-width:100%;margin:0 auto;padding:0 17px}@media (max-width: 1280px){.games-section{padding:0 20px}}@media (max-width: 768px){.games-section{padding:0 15px}}@media (max-width: 480px){.games-section{padding:0 10px}}.game-card__image-container{position:relative;width:100%;height:100%;display:block}.game-card__action-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;pointer-events:auto}.game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.game-card__image-container:hover img{opacity:.8;transition:opacity .3s ease}.game-card__action-btn--play{cursor:pointer!important;pointer-events:auto!important}.lobby_noGamesMessage{text-align:center;color:#fff;font-weight:700;font-size:20px}.lobby_loadMoreBtn{display:flex;justify-content:center;margin-top:20px}.lobby_loadMoreBtn .load-more-btn{cursor:pointer;color:#fff;font-weight:200;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px;border:1px solid rgb(255,125,0)}#filtered-games-section .lobby_games-row{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}#filtered-games-section .lobby_games-row .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}#filtered-games-section .lobby_games-row .game-card__content{position:relative;cursor:pointer;float:left;width:100%}#filtered-games-section .lobby_games-row .game-card__text.even-bg{background:#000b14}#filtered-games-section .lobby_games-row .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}#filtered-games-section .lobby_games-row .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}#filtered-games-section .lobby_games-row .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}#filtered-games-section .lobby_games-row .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}#filtered-games-section .lobby_games-row .ribbon span.hot{background:#c22026;color:#fff}#filtered-games-section .lobby_games-row .ribbon span.new,#filtered-games-section .lobby_games-row .ribbon span.featured{background:#ff7d00;color:#fff}#filtered-games-section .lobby_games-row .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}#filtered-games-section .lobby_games-row .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}#filtered-games-section .lobby_games-row .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}#filtered-games-section .lobby_games-row .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}#filtered-games-section .lobby_games-row .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.lobby_games-home{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}.lobby_games-home .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}.lobby_games-home .game-card__content{position:relative;cursor:pointer;float:left;width:100%}.lobby_games-home .game-card__text.even-bg{background:#000b14}.lobby_games-home .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}.lobby_games-home .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}.lobby_games-home .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}.lobby_games-home .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}.lobby_games-home .ribbon span.hot{background:#c22026;color:#fff}.lobby_games-home .ribbon span.new,.lobby_games-home .ribbon span.featured{background:#ff7d00;color:#fff}.lobby_games-home .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}.lobby_games-home .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}.lobby_games-home .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.lobby_games-home .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.lobby_games-home .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.lobby_games-home .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.lobby_games-home .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.lobby_games-home .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
396
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CasinoLobbyComponent, isStandalone: true, selector: "lib-casino-lobby", inputs: { casinoData: "casinoData", theme: "theme", baseUrl: "baseUrl", brandConfig: "brandConfig" }, outputs: { gameClicked: "gameClicked" }, viewQueries: [{ propertyName: "swiperContainer", first: true, predicate: ["swiperContainer"], descendants: true }, { propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "gameSwiperContainers", predicate: ["gameSwiperContainer"], descendants: true }], ngImport: i0, template: "<div class=\"lobby_main-lobby\">\r\n <div class=\"lobby_game-filter-background\" [ngStyle]=\"{ 'background': theme?.background || 'none' }\">\r\n <!-- Main Filter Section -->\r\n <div class=\"lobby_fixed-footer-width lobby_clearfix\" [ngStyle]=\"{ 'border-bottom': theme?.borderSearch || 'none' }\">\r\n <div class=\"display-filter-content\">\r\n <!-- Search Bar -->\r\n <div class=\"lobby_searchBar\">\r\n <div class=\"lobby_game-search\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\">\r\n <form class=\"lobby_form-inline\" (submit)=\"$event.preventDefault()\">\r\n <i class=\"fa fa-search\"></i>\r\n <input #searchInput class=\"lobby_game-search-form\" id=\"searchInput\" name=\"gameSearch\" type=\"text\" placeholder=\"GAME SEARCH\"\r\n aria-label=\"Search\" (input)=\"onSearchChange($event)\" />\r\n </form>\r\n </div>\r\n\r\n <!-- Provider Swiper -->\r\n <div class=\"lobby_swiperContainer\">\r\n <swiper-container #swiperContainer *ngIf=\"providerList && providerList.length\"\r\n slides-per-view=\"1\" space-between=\"6\" speed=\"50\" [loop]=\"shouldLoopProviders()\"\r\n navigation=\"false\" css-mode=\"true\" [breakpoints]=\"{\r\n '100': { slidesPerView: 3 },\r\n '200': { slidesPerView: 4 },\r\n '320': { slidesPerView: 4 },\r\n '480': { slidesPerView: 6 },\r\n '768': { slidesPerView: 8 },\r\n '991': { slidesPerView: 10 },\r\n '1280': { slidesPerView: 12 }\r\n }\">\r\n <swiper-slide *ngFor=\"let provider of providerList\">\r\n <div class=\"lobby_provider-slide-item\">\r\n <img [src]=\"brandConfig?.providersIconsDir + '/' + provider.vendorCode + '.svg'\"\r\n [alt]=\"provider.name\" (click)=\"filterProviderGames(0, provider.vendorCode)\"\r\n loading=\"lazy\" />\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n\r\n <!-- Navigation buttons - OUTSIDE .swiperContainer but INSIDE .searchBar -->\r\n <div class=\"swiper-navigation-row\">\r\n <button class=\"swiper-button-prev\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Previous providers\">\r\n <span class=\"icon-arrow-left-games\"></span>\r\n </button>\r\n\r\n <button class=\"swiper-button-next\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Next providers\">\r\n <span class=\"icon-arrow-right-games\"></span>\r\n </button>\r\n </div>\r\n <div class=\"game-provider\">\r\n <div class=\"desktop\">\r\n <ul class=\"f-tabs providerIcons-ul-desktop\">\r\n <li id=\"favouriteIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterFavouriteGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Favorite Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-heart\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Recent Games Icon -->\r\n <li id=\"recentGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterLastPlayedGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Last played Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-clock\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Hot Games Icon -->\r\n <li id=\"hotGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterHotGames(0, 'hot')\">\r\n <div id=\"hotGamestt\" style=\"display: none; margin-left: -23px\"\r\n class=\"ttip ttip-arrow\">\r\n Hot Games\r\n <span class=\"arrow-down\" style=\"margin-left: -35px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"hotGames\">\r\n <i class=\"fa fa-fire\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Game Category Dropdown -->\r\n <li id=\"gameCategory\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"game-category-link game-category-link-desktop hidden-xs hidden-sm display-filter-content\">\r\n <a type=\"button\" class=\"category-btn\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"toggleGameCategoryTop()\">\r\n {{ categoryLabel }}\r\n </a>\r\n <a type=\"button\" id=\"gameCategoryLink\" [ngClass]=\"{\r\n 'icon-angle-down': !categoryChosen,\r\n 'icon-close': categoryChosen,\r\n 'pull-right': true\r\n }\" aria-label=\"Toggle category menu\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"categoryChosen ? DropdownClose() : toggleGameCategoryTop()\"></a>\r\n\r\n <!-- Game Category Dropdown Menu (positioned directly below) -->\r\n <div id=\"gameCategoryTop\"\r\n class=\"clearfix game-category-list game-category-list-footer\"\r\n [style.display]=\"showGameCategoryTop ? 'block' : 'none'\">\r\n <div class=\"game-category-list-width\">\r\n <ul class=\"game-category-list-item\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.background || '#262626',\r\n 'border': theme?.border || 'none'\r\n }\">\r\n <li class=\"game-category-list-item-li\" *ngFor=\"let group of lobbyGames\"\r\n id=\"{{group.gameGroupDetails.id}}-LeftSideButton-footer\"\r\n (click)=\"categoryLabel = group.gameGroupDetails.name; filterGroupGames(0, group.gameGroupDetails.id)\">\r\n {{ group.gameGroupDetails.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Games Section -->\r\n <div class=\"games-background\" id=\"gamesLobby\" *ngIf=\"!filterActive\">\r\n <div *ngFor=\"let group of lobbyGames; let i = index\" class=\"games-section\">\r\n <div class=\"new-game-header\">\r\n <h3 [ngStyle]=\"{ 'color': theme?.textColor || '#FFFFFF' }\">{{group.gameGroupDetails.name}}</h3>\r\n <div>\r\n <a class=\"btn-newgamestrip\" [ngStyle]=\"{ 'border': (theme?.borderSearch || 'none'),\r\n 'background-color': hoveredViewAllIndex === i ? (theme?.buttonBackgroundColor || '') : (theme?.background || '#262626')\r\n }\" (click)=\"viewGameCategory(group.gameGroupDetails)\" (mouseenter)=\"hoveredViewAllIndex = i\"\r\n (mouseleave)=\"hoveredViewAllIndex = null\">VIEW ALL</a>\r\n <a class=\"lobby_btn-Arrow-left\" [ngClass]=\"{ 'pulse': pulsingButton === 'prev' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'prev' + i ? (theme?.borderSearch || 'none'):'1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Previous games\"\r\n (click)=\"triggerPulse('prev' + i); slidePrev(i)\" (mouseenter)=\"hoveredButton = 'prev' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-left\"></span>\r\n </a>\r\n <a class=\"lobby_btn-Arrow-right\" [ngClass]=\"{ 'pulse': pulsingButton === 'next' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'next' + i ? (theme?.borderSearch || 'none') : '1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Next games\"\r\n (click)=\"triggerPulse('next' + i); slideNext(i)\" (mouseenter)=\"hoveredButton = 'next' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-right\"></span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"swiperContainer\">\r\n <div style=\"overflow-x: auto; white-space: nowrap; width: 100%;\">\r\n <swiper-container #gameSwiperContainer *ngIf=\"group.games && group.games.length\" slides-per-view=\"1\"\r\n space-between=\"10\" speed=\"50\" [loop]=\"shouldLoopGamesForGroup(group.games)\" navigation=\"false\"\r\n css-mode=\"false\" [breakpoints]=\"{\r\n '190': { slidesPerView: 1, spaceBetween: 10 },\r\n '350': { slidesPerView: 2, spaceBetween: 10 },\r\n '520': { slidesPerView: 3, spaceBetween: 10 },\r\n '676': { slidesPerView: 4, spaceBetween: 10 },\r\n '834': { slidesPerView: 4, spaceBetween: 10 },\r\n '998': { slidesPerView: 5, spaceBetween: 10 },\r\n '1158': { slidesPerView: 6, spaceBetween: 10 },\r\n '1280': { slidesPerView: 6, spaceBetween: 10 }\r\n }\">\r\n <swiper-slide *ngFor=\"let game of group.games; let gameIndex = index\"\r\n [attr.data-game-id]=\"i + '-' + game.gameCode\" class=\"lobby_games-home\">\r\n <div class=\"game-card\">\r\n <div class=\"game-card__content\"\r\n (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\"\r\n *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\"\r\n (click)=\"getgameClicked(game.gameCode)\"\r\n style=\"cursor: pointer;\"\r\n >\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\"\r\n (error)=\"onImageError($event)\" [alt]=\"game.name\" loading=\"lazy\"\r\n [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name\r\n }}</span></div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Filtered Games Sections-->\r\n <div class=\"games-background\" id=\"filtered-games-section\" *ngIf=\"filterActive\">\r\n <div class=\"lobby_games-row\">\r\n <div class=\"game-card\" [attr.data-game-id]=\"gameIndex + '-' + game.gameCode\"\r\n *ngFor=\"let game of filteredGames; let gameIndex = index\">\r\n <div class=\"game-card__content\" (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\" *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\" (click)=\"getgameClicked(game.gameCode)\" style=\"cursor: pointer;\">\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\" (error)=\"onImageError($event)\"\r\n [alt]=\"game.name\" loading=\"lazy\" [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name }}</span></div>\r\n </div>\r\n </div>\r\n <div class=\"lobby_loadMoreBtn\" *ngIf=\"filterShowLoadMore\">\r\n <a class=\"btn load-more-btn\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n (click)=\"loadMoreFilteredGames()\">\r\n LOAD MORE\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"games-background lobby_noGamesMessage\" id=\"noGamesMessage\" *ngIf=\"noGamesToShow\">\r\n <p>NO GAMES FOUND</p>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";*{margin:0;padding:0;box-sizing:border-box}.icon-heart-icon-01:before{content:\"\\e93c\"}.icon-heart-icon-02:before{content:\"\\2764\\fe0f\"}.icon-flame-fill:before{content:\"\\1f525\"}.icon-angle-down:before{content:\"\\25bc\"}.icon-close:before{content:\"\\2715\"}.icon-arrow-left-games:before{content:\"<\"}.icon-arrow-right-games:before{content:\">\"}.lobby_clearfix:after{content:\"\";display:table;clear:both}.pull-right{float:right}.pull-left{float:left}.hide{display:none!important}.display-filter-content{display:block;border-radius:3px;width:100%;max-width:1280px;margin:0 auto}.hide-filter-content{display:none}.lobby_main-lobby{width:1280px;width:100%;max-width:1280px;display:block;position:relative;margin:0 auto}.lobby_game-filter-background{width:100%;max-width:var(--max-content-width);display:block;position:relative;margin:0 auto;padding:0 15px;overflow:visible;position:sticky;top:0;z-index:100}@media (max-width: 1280px){.lobby_game-filter-background{padding:0 20px}}@media (max-width: 768px){.lobby_game-filter-background{padding:0 15px}}@media (max-width: 480px){.lobby_game-filter-background{padding:0 10px}}.lobby_fixed-footer-width{width:1280px;max-width:100%;margin:0 auto 5px;padding:10px 15px 10px 5px}@media (max-width: 991px){.lobby_fixed-footer-width{width:100%;padding:10px}}@media (max-width: 768px){.lobby_fixed-footer-width{padding:10px 5px}}.lobby_searchBar{display:flex;align-items:center;gap:10px;flex-wrap:nowrap}@media (max-width: 1200px){.lobby_searchBar{gap:8px}}@media (max-width: 991px){.lobby_searchBar{gap:6px}}@media (max-width: 768px){.lobby_searchBar{flex-wrap:wrap;gap:10px}}.lobby_game-search{padding:2px 6px;border-radius:3px;margin-left:0;color:#a7a9ac;font-weight:600;flex-shrink:0}@media (max-width: 991px){.lobby_game-search{margin-left:0;padding:0 15px}}@media (max-width: 768px){.lobby_game-search{width:100%;margin-left:0}}.lobby_game-search i{padding-left:1px;font-size:15px;color:#fff;position:relative;cursor:pointer}.lobby_form-inline{display:flex;align-items:center}.lobby_game-search-form{background:transparent;color:var(--footer-games-text-color);border-radius:3px;padding:2px 8px;width:160px;height:32px;text-transform:uppercase;border:none;outline:none}@media (max-width: 768px){.lobby_game-search-form{width:100%;max-width:200px}}@media (max-width: 480px){.lobby_game-search-form{font-size:14px}}.lobby_game-search-form::placeholder{color:#a7a9ac}.lobby_swiperContainer{display:flex;align-items:center;flex:1;min-width:0;max-width:54%;overflow:visible}@media (max-width: 991px){.lobby_swiperContainer{max-width:calc(100% + -0px)}}@media (max-width: 768px){.lobby_swiperContainer{width:100%;max-width:100%}}.lobby_swiperContainer swiper-container{width:100%!important;max-width:1280px;overflow:hidden}@media (max-width: 991px){.lobby_swiperContainer swiper-container{max-width:900px}}@media (max-width: 768px){.lobby_swiperContainer swiper-container{max-width:100%}}.lobby_provider-slide-item{padding:4px 7px 7px;font-size:20px;display:flex;align-items:center;justify-content:center;color:#fff}.lobby_provider-slide-item img{width:100%;height:30px;cursor:pointer;object-fit:contain;filter:brightness(0) invert(1)}@media (max-width: 480px){.lobby_provider-slide-item img{height:16px}}.swiper-navigation-row{display:flex;align-items:center;gap:10px;margin-left:10px;flex-shrink:0}@media (max-width: 768px){.swiper-navigation-row{gap:5px;margin-left:5px}}@media (max-width: 480px){.swiper-navigation-row{gap:3px;margin-left:3px}}.swiper-button-next,.swiper-button-prev{position:static!important;background:none;border:none;cursor:pointer;width:auto;height:auto;margin:0;padding:0 8px;display:flex;align-items:center}@media (max-width: 768px){.swiper-button-next,.swiper-button-prev{padding:0 4px}}.swiper-button-next:after,.swiper-button-prev:after{color:inherit}.icon-arrow-left-games,.icon-arrow-right-games{font-size:32px}@media (max-width: 768px){.icon-arrow-left-games,.icon-arrow-right-games{font-size:24px}}.swiper-button-disabled .icon-arrow-left-games,.swiper-button-disabled .icon-arrow-right-games{opacity:.4;cursor:not-allowed}.game-provider{flex-shrink:0;overflow:visible}@media (max-width: 991px){.game-provider{float:right}}@media (max-width: 768px){.game-provider{width:100%;float:none}}.f-tabs{margin:0;padding-left:10px;list-style:none;overflow:visible}@media (max-width: 768px){.f-tabs{padding-left:5px}}.f-tabs li{padding:4px 7px 7px;font-size:17px;margin-right:5px;text-transform:uppercase;color:var(--footer-games-text-color);float:left;cursor:pointer}@media (max-width: 768px){.f-tabs li{font-size:18px;padding:3px 5px 5px;margin-right:3px}}@media (max-width: 480px){.f-tabs li{font-size:16px}}.f-tabs li.btt{border:1px solid #02B0CB;border-radius:3px;margin-right:7px;padding:5px}.f-tabs li.active i{color:#02b0cb}.f-tabs li.active img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)}.f-tabs li i{color:var(--footer-games-text-color)}.f-tabs li img{height:20px;width:20px;filter:brightness(0) saturate(100%) invert(98%) sepia(99%) saturate(2%) hue-rotate(208deg) brightness(101%) contrast(100%)}@media (max-width: 768px){.f-tabs li img{height:18px;width:18px}}.f-tabs li:hover i{color:var(--footer-games-hover-color)}.f-tabs li:hover img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)!important}.providerIcons-ul-desktop{display:inline-flex;overflow:visible;width:243px;flex-shrink:0}@media (max-width: 991px){.providerIcons-ul-desktop{width:300px}}@media (max-width: 768px){.providerIcons-ul-desktop{width:100%;justify-content:flex-start}}.game-category-link{font-weight:600;color:var(--footer-games-text-color);min-width:130px;padding:5px 10px;text-align:center;font-size:15px;position:relative;overflow:visible!important}@media (max-width: 768px){.game-category-link{min-width:100px;font-size:14px;padding:4px 8px}}.desktop{display:block!important}.mobile{display:none}@media (max-width: 991px){.mobile{display:block}}.game-category-list{background-color:var(--footer-games-cat-list-bg-color);color:var(--footer-games-text-color);border-radius:3px;position:absolute;z-index:9999;top:calc(100% + 5px);right:0;left:auto;display:none;box-shadow:0 4px 8px #0000004d;min-width:260px}@media (max-width: 991px){.game-category-list{right:0;left:auto}}@media (max-width: 768px){.game-category-list{left:50%;right:auto;transform:translate(-50%);width:90vw;max-width:400px}}.game-category-list-width{width:100%;display:flex;justify-content:flex-end}.game-category-list-item{margin:0;padding:0;list-style:none;min-width:257.45px;width:auto;overflow-x:auto;white-space:nowrap;text-align:left;float:none}@media (max-width: 768px){.game-category-list-item{min-width:unset;width:100%}}.game-category-list-item-li{padding:10px 0 10px 15px;font-size:14px;text-transform:uppercase;color:var(--footer-games-text-color);cursor:pointer;font-weight:600;width:50%;float:left}.game-category-list-item-li:hover{color:var(--footer-games-hover-color)!important}.game-category-list-item-li.active{color:#fff;background:#02b0cb}.ttip{position:absolute;margin-top:-38px;border:1px solid #02B0CB;background-color:#192026;border-radius:2px;padding-left:4px;padding-right:4px;font-size:10px;z-index:99999;display:none}.arrow-down{width:0px;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #02B0CB;position:absolute;margin-top:22px}.games-background{width:100%;display:block;position:relative;margin:0 auto;padding:20px 0}@media (max-width: 1280px){.games-background{padding:20px 0}}@media (max-width: 768px){.games-background{padding:15px 0}}@media (max-width: 480px){.games-background{padding:10px 0}}.new-game-header{height:60px;border-bottom:1px solid grey;display:flex;align-items:center;margin-bottom:24px;justify-content:space-between}@media (max-width: 768px){.new-game-header{height:50px;margin-bottom:16px}}@media (max-width: 480px){.new-game-header{flex-direction:column;height:auto;padding:10px 0;align-items:flex-start;gap:10px}}.new-game-header h3{font-size:18px;font-weight:600;margin-left:10px}@media (max-width: 768px){.new-game-header h3{font-size:16px;margin-left:5px}}@media (max-width: 480px){.new-game-header h3{font-size:14px;margin-left:0}}.new-game-header>div{display:flex;align-items:center;gap:10px}@media (max-width: 480px){.new-game-header>div{width:100%;justify-content:space-between}}.btn-newgamestrip{background-color:transparent;font-weight:600;color:#fff;font-size:15px;border-radius:4px;text-align:center;text-decoration:none;width:120px!important;height:auto!important;padding:9.9px 2px!important;cursor:pointer;z-index:3;position:relative}@media (max-width: 768px){.btn-newgamestrip{font-size:13px;width:100px!important;padding:8px 2px!important}}@media (max-width: 480px){.btn-newgamestrip{font-size:12px;width:80px!important;padding:6px 2px!important}}.lobby_btn-Arrow-right,.lobby_btn-Arrow-left{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:4px}@media (max-width: 768px){.lobby_btn-Arrow-right,.lobby_btn-Arrow-left{width:30px!important;height:30px!important}}@media (max-width: 480px){.lobby_btn-Arrow-right,.lobby_btn-Arrow-left{width:25px!important;height:25px!important}}.lobby_btn-Arrow-right .arrow-icon,.lobby_btn-Arrow-left .arrow-icon{display:inline-block;width:18px;height:18px;border:.5px solid white;border-width:0 4px 4px 0;padding:3px}.lobby_btn-Arrow-right .arrow-left,.lobby_btn-Arrow-left .arrow-left{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.lobby_btn-Arrow-right .arrow-right,.lobby_btn-Arrow-left .arrow-right{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.lobby_btn-Arrow-right{background-image:url(/assets/img/BTN-arrow-right.svg)!important}.lobby_btn-Arrow-right:hover{background-image:url(/assets/img/BTN-arrow-right-hov.svg)!important}.lobby_btn-Arrow-left{background-image:url(/assets/img/BTN-arrow-left.svg)!important}.lobby_btn-Arrow-left:hover{background-image:url(/assets/img/BTN-arrow-left-hov.svg)!important}.new-game-holder{width:100%;height:auto;overflow-x:hidden;cursor:grab;margin:auto;background:none repeat scroll 0 0;position:relative}.game-card{display:flex;flex-direction:column;align-items:center;height:auto;min-height:170px;width:100%;position:relative}@media (max-width: 991px){.game-card{min-height:160px}}@media (max-width: 768px){.game-card{min-height:150px}}@media (max-width: 480px){.game-card{min-height:130px}}.game-card img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;display:block;transition:opacity .3s ease}.game-card img:hover{opacity:.2}.game-card .game-card__text{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;width:100%;min-height:50px;font-size:10px;font-weight:100;padding:10px}@media (max-width: 768px){.game-card .game-card__text{font-size:9px;padding:8px 12px;min-height:45px}}@media (max-width: 480px){.game-card .game-card__text{font-size:8px;padding:6px 10px;min-height:40px}}.game-card .game-card__text .favicon{flex:1;display:flex;justify-content:flex-start}.game-card .game-card__text .cardtext{flex:3;display:flex;justify-content:flex-start;word-break:break-word}swiper-container{--swiper-navigation-size: 20px;width:100%!important}@media (max-width: 768px){swiper-container{--swiper-navigation-size: 16px}}swiper-slide{display:flex;align-items:center;justify-content:center;height:auto!important}.img-gradient{display:inline-block}.gameimage{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.pulse{animation:pulse .4s}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.12)}to{transform:scale(1)}}.category-btn{width:160px;min-width:unset;min-height:45px;font-size:9px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon-search{font-size:10px;padding:0;color:#fff;top:0;position:relative!important;display:inline-flex!important;clear:both}.fa-clock,.fa-fire,.fa-heart{color:#fff!important;font-size:18px;vertical-align:middle}.game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.games-section{width:1280px;max-width:100%;margin:0 auto;padding:0 17px}@media (max-width: 1280px){.games-section{padding:0 20px}}@media (max-width: 768px){.games-section{padding:0 15px}}@media (max-width: 480px){.games-section{padding:0 10px}}.game-card__image-container{position:relative;width:100%;height:100%;display:block}.game-card__action-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;pointer-events:auto}.game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.game-card__image-container:hover img{opacity:.8;transition:opacity .3s ease}.game-card__action-btn--play{cursor:pointer!important;pointer-events:auto!important}.lobby_noGamesMessage{text-align:center;color:#fff;font-weight:700;font-size:20px}.lobby_loadMoreBtn{display:flex;justify-content:center;margin-top:20px}.lobby_loadMoreBtn .load-more-btn{cursor:pointer;color:#fff;font-weight:200;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px;border:1px solid rgb(255,125,0)}#filtered-games-section .lobby_games-row{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}#filtered-games-section .lobby_games-row .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}#filtered-games-section .lobby_games-row .game-card__content{position:relative;cursor:pointer;float:left;width:100%}#filtered-games-section .lobby_games-row .game-card__text.even-bg{background:#000b14}#filtered-games-section .lobby_games-row .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}#filtered-games-section .lobby_games-row .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}#filtered-games-section .lobby_games-row .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}#filtered-games-section .lobby_games-row .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}#filtered-games-section .lobby_games-row .ribbon span.hot{background:#c22026;color:#fff}#filtered-games-section .lobby_games-row .ribbon span.new,#filtered-games-section .lobby_games-row .ribbon span.featured{background:#ff7d00;color:#fff}#filtered-games-section .lobby_games-row .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}#filtered-games-section .lobby_games-row .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}#filtered-games-section .lobby_games-row .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}#filtered-games-section .lobby_games-row .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}#filtered-games-section .lobby_games-row .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.lobby_games-home{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}.lobby_games-home .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}.lobby_games-home .game-card__content{position:relative;cursor:pointer;float:left;width:100%}.lobby_games-home .game-card__text.even-bg{background:#000b14}.lobby_games-home .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}.lobby_games-home .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}.lobby_games-home .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}.lobby_games-home .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}.lobby_games-home .ribbon span.hot{background:#c22026;color:#fff}.lobby_games-home .ribbon span.new,.lobby_games-home .ribbon span.featured{background:#ff7d00;color:#fff}.lobby_games-home .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}.lobby_games-home .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}.lobby_games-home .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.lobby_games-home .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.lobby_games-home .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.lobby_games-home .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.lobby_games-home .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.lobby_games-home .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
397
397
|
}
|
|
398
398
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CasinoLobbyComponent, decorators: [{
|
|
399
399
|
type: Component,
|
|
400
|
-
args: [{ selector: 'lib-casino-lobby', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"lobby_main-lobby\">\r\n <div class=\"lobby_game-filter-background\" [ngStyle]=\"{ 'background': theme?.background || 'none' }\">\r\n <!-- Main Filter Section -->\r\n <div class=\"lobby_fixed-footer-width lobby_clearfix\" [ngStyle]=\"{ 'border-bottom': theme?.borderSearch || 'none' }\">\r\n <div class=\"display-filter-content\">\r\n <!-- Search Bar -->\r\n <div class=\"lobby_searchBar\">\r\n <div class=\"lobby_game-search\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\">\r\n <form class=\"lobby_form-inline\" (submit)=\"$event.preventDefault()\">\r\n <i class=\"fa fa-search\"></i>\r\n <input #searchInput class=\"lobby_game-search-form\" id=\"searchInput\" name=\"gameSearch\" type=\"text\" placeholder=\"GAME SEARCH\"\r\n aria-label=\"Search\" (input)=\"onSearchChange($event)\" />\r\n </form>\r\n </div>\r\n\r\n <!-- Provider Swiper -->\r\n <div class=\"lobby_swiperContainer\">\r\n <swiper-container #swiperContainer *ngIf=\"providerList && providerList.length\"\r\n slides-per-view=\"1\" space-between=\"6\" speed=\"50\" [loop]=\"shouldLoopProviders()\"\r\n navigation=\"false\" css-mode=\"true\" [breakpoints]=\"{\r\n '100': { slidesPerView: 3 },\r\n '200': { slidesPerView: 4 },\r\n '320': { slidesPerView: 4 },\r\n '480': { slidesPerView: 6 },\r\n '768': { slidesPerView: 8 },\r\n '991': { slidesPerView: 10 },\r\n '1280': { slidesPerView: 12 }\r\n }\">\r\n <swiper-slide *ngFor=\"let provider of providerList\">\r\n <div class=\"lobby_provider-slide-item\">\r\n <img [src]=\"brandConfig?.providersIconsDir + '/' + provider.vendorCode + '.svg'\"\r\n [alt]=\"provider.name\" (click)=\"filterProviderGames(0, provider.vendorCode)\"\r\n loading=\"lazy\" />\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n\r\n <!-- Navigation buttons - OUTSIDE .swiperContainer but INSIDE .searchBar -->\r\n <div class=\"swiper-navigation-row\">\r\n <button class=\"swiper-button-prev\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Previous providers\">\r\n <span class=\"icon-arrow-left-games\"></span>\r\n </button>\r\n\r\n <button class=\"swiper-button-next\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Next providers\">\r\n <span class=\"icon-arrow-right-games\"></span>\r\n </button>\r\n </div>\r\n <div class=\"game-provider\">\r\n <div class=\"desktop\">\r\n <ul class=\"f-tabs providerIcons-ul-desktop\">\r\n <li id=\"favouriteIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterFavouriteGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Favorite Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-heart\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Recent Games Icon -->\r\n <li id=\"recentGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterLastPlayedGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Last played Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-clock\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Hot Games Icon -->\r\n <li id=\"hotGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterHotGames(0, 'hot')\">\r\n <div id=\"hotGamestt\" style=\"display: none; margin-left: -23px\"\r\n class=\"ttip ttip-arrow\">\r\n Hot Games\r\n <span class=\"arrow-down\" style=\"margin-left: -35px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"hotGames\">\r\n <i class=\"fa fa-fire\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Game Category Dropdown -->\r\n <li id=\"gameCategory\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"game-category-link game-category-link-desktop hidden-xs hidden-sm display-filter-content\">\r\n <a type=\"button\" class=\"category-btn\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"toggleGameCategoryTop()\">\r\n {{ categoryLabel }}\r\n </a>\r\n <a type=\"button\" id=\"gameCategoryLink\" [ngClass]=\"{\r\n 'icon-angle-down': !categoryChosen,\r\n 'icon-close': categoryChosen,\r\n 'pull-right': true\r\n }\" aria-label=\"Toggle category menu\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"categoryChosen ? DropdownClose() : toggleGameCategoryTop()\"></a>\r\n\r\n <!-- Game Category Dropdown Menu (positioned directly below) -->\r\n <div id=\"gameCategoryTop\"\r\n class=\"clearfix game-category-list game-category-list-footer\"\r\n [style.display]=\"showGameCategoryTop ? 'block' : 'none'\">\r\n <div class=\"game-category-list-width\">\r\n <ul class=\"game-category-list-item\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.background || '#262626',\r\n 'border': theme?.border || 'none'\r\n }\">\r\n <li class=\"game-category-list-item-li\" *ngFor=\"let group of lobbyGames\"\r\n id=\"{{group.gameGroupDetails.id}}-LeftSideButton-footer\"\r\n (click)=\"categoryLabel = group.gameGroupDetails.name; filterGroupGames(0, group.gameGroupDetails.id)\">\r\n {{ group.gameGroupDetails.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Games Section -->\r\n <div class=\"games-background\" id=\"gamesLobby\" *ngIf=\"!filterActive\">\r\n <div *ngFor=\"let group of lobbyGames; let i = index\" class=\"games-section\">\r\n <div class=\"new-game-header\">\r\n <h3 [ngStyle]=\"{ 'color': theme?.textColor || '#FFFFFF' }\">{{group.gameGroupDetails.name}}</h3>\r\n <div>\r\n <a class=\"btn-newgamestrip\" [ngStyle]=\"{ 'border': (theme?.borderSearch || 'none'),\r\n 'background-color': hoveredViewAllIndex === i ? (theme?.buttonBackgroundColor || '') : (theme?.background || '#262626')\r\n }\" (click)=\"viewGameCategory(group.gameGroupDetails)\" (mouseenter)=\"hoveredViewAllIndex = i\"\r\n (mouseleave)=\"hoveredViewAllIndex = null\">VIEW ALL</a>\r\n <a class=\"btn-Arrow-left\" [ngClass]=\"{ 'pulse': pulsingButton === 'prev' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'prev' + i ? (theme?.borderSearch || 'none'):'1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Previous games\"\r\n (click)=\"triggerPulse('prev' + i); slidePrev(i)\" (mouseenter)=\"hoveredButton = 'prev' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-left\"></span>\r\n </a>\r\n <a class=\"btn-Arrow-right\" [ngClass]=\"{ 'pulse': pulsingButton === 'next' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'next' + i ? (theme?.borderSearch || 'none') : '1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Next games\"\r\n (click)=\"triggerPulse('next' + i); slideNext(i)\" (mouseenter)=\"hoveredButton = 'next' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-right\"></span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"swiperContainer\">\r\n <div style=\"overflow-x: auto; white-space: nowrap; width: 100%;\">\r\n <swiper-container #gameSwiperContainer *ngIf=\"group.games && group.games.length\" slides-per-view=\"1\"\r\n space-between=\"10\" speed=\"50\" [loop]=\"shouldLoopGamesForGroup(group.games)\" navigation=\"false\"\r\n css-mode=\"false\" [breakpoints]=\"{\r\n '190': { slidesPerView: 1, spaceBetween: 10 },\r\n '350': { slidesPerView: 2, spaceBetween: 10 },\r\n '520': { slidesPerView: 3, spaceBetween: 10 },\r\n '676': { slidesPerView: 4, spaceBetween: 10 },\r\n '834': { slidesPerView: 4, spaceBetween: 10 },\r\n '998': { slidesPerView: 5, spaceBetween: 10 },\r\n '1158': { slidesPerView: 6, spaceBetween: 10 },\r\n '1280': { slidesPerView: 6, spaceBetween: 10 }\r\n }\">\r\n <swiper-slide *ngFor=\"let game of group.games; let gameIndex = index\"\r\n [attr.data-game-id]=\"i + '-' + game.gameCode\" class=\"lobby_games-home\">\r\n <div class=\"game-card\">\r\n <div class=\"game-card__content\"\r\n (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\"\r\n *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\"\r\n (click)=\"getgameClicked(game.gameCode)\"\r\n style=\"cursor: pointer;\"\r\n >\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\"\r\n (error)=\"onImageError($event)\" [alt]=\"game.name\" loading=\"lazy\"\r\n [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name\r\n }}</span></div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Filtered Games Sections-->\r\n <div class=\"games-background\" id=\"filtered-games-section\" *ngIf=\"filterActive\">\r\n <div class=\"lobby_games-row\">\r\n <div class=\"game-card\" [attr.data-game-id]=\"gameIndex + '-' + game.gameCode\"\r\n *ngFor=\"let game of filteredGames; let gameIndex = index\">\r\n <div class=\"game-card__content\" (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\" *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\" (click)=\"getgameClicked(game.gameCode)\" style=\"cursor: pointer;\">\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\" (error)=\"onImageError($event)\"\r\n [alt]=\"game.name\" loading=\"lazy\" [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name }}</span></div>\r\n </div>\r\n </div>\r\n <div class=\"lobby_loadMoreBtn\" *ngIf=\"filterShowLoadMore\">\r\n <a class=\"btn load-more-btn\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n (click)=\"loadMoreFilteredGames()\">\r\n LOAD MORE\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"games-background lobby_noGamesMessage\" id=\"noGamesMessage\" *ngIf=\"noGamesToShow\">\r\n <p>NO GAMES FOUND</p>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";*{margin:0;padding:0;box-sizing:border-box}.icon-heart-icon-01:before{content:\"\\e93c\"}.icon-heart-icon-02:before{content:\"\\2764\\fe0f\"}.icon-flame-fill:before{content:\"\\1f525\"}.icon-angle-down:before{content:\"\\25bc\"}.icon-close:before{content:\"\\2715\"}.icon-arrow-left-games:before{content:\"<\"}.icon-arrow-right-games:before{content:\">\"}.lobby_clearfix:after{content:\"\";display:table;clear:both}.pull-right{float:right}.pull-left{float:left}.hide{display:none!important}.display-filter-content{display:block;border-radius:3px;width:100%;max-width:1280px;margin:0 auto}.hide-filter-content{display:none}.lobby_main-lobby{width:1280px;width:100%;max-width:1280px;display:block;position:relative;margin:0 auto}.lobby_game-filter-background{width:100%;max-width:var(--max-content-width);display:block;position:relative;margin:0 auto;padding:0 15px;overflow:visible;position:sticky;top:0;z-index:100}@media (max-width: 1280px){.lobby_game-filter-background{padding:0 20px}}@media (max-width: 768px){.lobby_game-filter-background{padding:0 15px}}@media (max-width: 480px){.lobby_game-filter-background{padding:0 10px}}.lobby_fixed-footer-width{width:1280px;max-width:100%;margin:0 auto 5px;padding:10px 15px 10px 5px}@media (max-width: 991px){.lobby_fixed-footer-width{width:100%;padding:10px}}@media (max-width: 768px){.lobby_fixed-footer-width{padding:10px 5px}}.lobby_searchBar{display:flex;align-items:center;gap:10px;flex-wrap:nowrap}@media (max-width: 1200px){.lobby_searchBar{gap:8px}}@media (max-width: 991px){.lobby_searchBar{gap:6px}}@media (max-width: 768px){.lobby_searchBar{flex-wrap:wrap;gap:10px}}.lobby_game-search{padding:2px 6px;border-radius:3px;margin-left:0;color:#a7a9ac;font-weight:600;flex-shrink:0}@media (max-width: 991px){.lobby_game-search{margin-left:0;padding:0 15px}}@media (max-width: 768px){.lobby_game-search{width:100%;margin-left:0}}.lobby_game-search i{padding-left:15px;font-size:15px;color:#fff;position:relative;cursor:pointer}.lobby_form-inline{display:flex;align-items:center}.lobby_game-search-form{background:transparent;color:var(--footer-games-text-color);border-radius:3px;padding:2px 8px;width:160px;height:32px;text-transform:uppercase;border:none;outline:none}@media (max-width: 768px){.lobby_game-search-form{width:100%;max-width:200px}}@media (max-width: 480px){.lobby_game-search-form{font-size:14px}}.lobby_game-search-form::placeholder{color:#a7a9ac}.lobby_swiperContainer{display:flex;align-items:center;flex:1;min-width:0;max-width:100%;overflow:visible}@media (max-width: 991px){.lobby_swiperContainer{max-width:calc(100% + -0px)}}@media (max-width: 768px){.lobby_swiperContainer{width:100%;max-width:100%}}.lobby_swiperContainer swiper-container{width:100%!important;max-width:1280px;overflow:hidden}@media (max-width: 991px){.lobby_swiperContainer swiper-container{max-width:900px}}@media (max-width: 768px){.lobby_swiperContainer swiper-container{max-width:100%}}.lobby_provider-slide-item{padding:4px 7px 7px;font-size:20px;display:flex;align-items:center;justify-content:center;color:#fff}.lobby_provider-slide-item img{width:100%;height:20px;cursor:pointer;object-fit:contain;filter:brightness(0) invert(1)}@media (max-width: 480px){.lobby_provider-slide-item img{height:16px}}.swiper-navigation-row{display:flex;align-items:center;gap:10px;margin-left:10px;flex-shrink:0}@media (max-width: 768px){.swiper-navigation-row{gap:5px;margin-left:5px}}@media (max-width: 480px){.swiper-navigation-row{gap:3px;margin-left:3px}}.swiper-button-next,.swiper-button-prev{position:static!important;background:none;border:none;cursor:pointer;width:auto;height:auto;margin:0;padding:0 8px;display:flex;align-items:center}@media (max-width: 768px){.swiper-button-next,.swiper-button-prev{padding:0 4px}}.swiper-button-next:after,.swiper-button-prev:after{color:inherit}.icon-arrow-left-games,.icon-arrow-right-games{font-size:32px}@media (max-width: 768px){.icon-arrow-left-games,.icon-arrow-right-games{font-size:24px}}.swiper-button-disabled .icon-arrow-left-games,.swiper-button-disabled .icon-arrow-right-games{opacity:.4;cursor:not-allowed}.game-provider{flex-shrink:0;overflow:visible}@media (max-width: 991px){.game-provider{float:right}}@media (max-width: 768px){.game-provider{width:100%;float:none}}.f-tabs{margin:0;padding-left:10px;list-style:none;overflow:visible}@media (max-width: 768px){.f-tabs{padding-left:5px}}.f-tabs li{padding:4px 7px 7px;font-size:17px;margin-right:5px;text-transform:uppercase;color:var(--footer-games-text-color);float:left;cursor:pointer}@media (max-width: 768px){.f-tabs li{font-size:18px;padding:3px 5px 5px;margin-right:3px}}@media (max-width: 480px){.f-tabs li{font-size:16px}}.f-tabs li.btt{border:1px solid #02B0CB;border-radius:3px;margin-right:7px;padding:5px}.f-tabs li.active i{color:#02b0cb}.f-tabs li.active img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)}.f-tabs li i{color:var(--footer-games-text-color)}.f-tabs li img{height:20px;width:20px;filter:brightness(0) saturate(100%) invert(98%) sepia(99%) saturate(2%) hue-rotate(208deg) brightness(101%) contrast(100%)}@media (max-width: 768px){.f-tabs li img{height:18px;width:18px}}.f-tabs li:hover i{color:var(--footer-games-hover-color)}.f-tabs li:hover img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)!important}.providerIcons-ul-desktop{display:inline-flex;overflow:visible;width:243px;flex-shrink:0}@media (max-width: 991px){.providerIcons-ul-desktop{width:300px}}@media (max-width: 768px){.providerIcons-ul-desktop{width:100%;justify-content:flex-start}}.game-category-link{font-weight:600;color:var(--footer-games-text-color);min-width:130px;padding:5px 10px;text-align:center;font-size:15px;position:relative;overflow:visible!important}@media (max-width: 768px){.game-category-link{min-width:100px;font-size:14px;padding:4px 8px}}.desktop{display:block!important}.mobile{display:none}@media (max-width: 991px){.mobile{display:block}}.game-category-list{background-color:var(--footer-games-cat-list-bg-color);color:var(--footer-games-text-color);border-radius:3px;position:absolute;z-index:9999;top:calc(100% + 5px);right:0;left:auto;display:none;box-shadow:0 4px 8px #0000004d;min-width:260px}@media (max-width: 991px){.game-category-list{right:0;left:auto}}@media (max-width: 768px){.game-category-list{left:50%;right:auto;transform:translate(-50%);width:90vw;max-width:400px}}.game-category-list-width{width:100%;display:flex;justify-content:flex-end}.game-category-list-item{margin:0;padding:0;list-style:none;min-width:257.45px;width:auto;overflow-x:auto;white-space:nowrap;text-align:left;float:none}@media (max-width: 768px){.game-category-list-item{min-width:unset;width:100%}}.game-category-list-item-li{padding:10px 0 10px 15px;font-size:14px;text-transform:uppercase;color:var(--footer-games-text-color);cursor:pointer;font-weight:600;width:50%;float:left}.game-category-list-item-li:hover{color:var(--footer-games-hover-color)!important}.game-category-list-item-li.active{color:#fff;background:#02b0cb}.ttip{position:absolute;margin-top:-38px;border:1px solid #02B0CB;background-color:#192026;border-radius:2px;padding-left:4px;padding-right:4px;font-size:10px;z-index:99999;display:none}.arrow-down{width:0px;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #02B0CB;position:absolute;margin-top:22px}.games-background{width:100%;display:block;position:relative;margin:0 auto;padding:20px 0}@media (max-width: 1280px){.games-background{padding:20px 0}}@media (max-width: 768px){.games-background{padding:15px 0}}@media (max-width: 480px){.games-background{padding:10px 0}}.new-game-header{height:60px;border-bottom:1px solid grey;display:flex;align-items:center;margin-bottom:24px;justify-content:space-between}@media (max-width: 768px){.new-game-header{height:50px;margin-bottom:16px}}@media (max-width: 480px){.new-game-header{flex-direction:column;height:auto;padding:10px 0;align-items:flex-start;gap:10px}}.new-game-header h3{font-size:18px;font-weight:600;margin-left:10px}@media (max-width: 768px){.new-game-header h3{font-size:16px;margin-left:5px}}@media (max-width: 480px){.new-game-header h3{font-size:14px;margin-left:0}}.new-game-header>div{display:flex;align-items:center;gap:10px}@media (max-width: 480px){.new-game-header>div{width:100%;justify-content:space-between}}.btn-newgamestrip{background-color:transparent;font-weight:600;color:#fff;font-size:15px;border-radius:4px;text-align:center;text-decoration:none;width:120px!important;height:auto!important;padding:9.9px 2px!important;cursor:pointer;z-index:3;position:relative}@media (max-width: 768px){.btn-newgamestrip{font-size:13px;width:100px!important;padding:8px 2px!important}}@media (max-width: 480px){.btn-newgamestrip{font-size:12px;width:80px!important;padding:6px 2px!important}}.btn-Arrow-right,.btn-Arrow-left{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:4px}@media (max-width: 768px){.btn-Arrow-right,.btn-Arrow-left{width:30px!important;height:30px!important}}@media (max-width: 480px){.btn-Arrow-right,.btn-Arrow-left{width:25px!important;height:25px!important}}.btn-Arrow-right .arrow-icon,.btn-Arrow-left .arrow-icon{display:inline-block;width:18px;height:18px;border:.5px solid white;border-width:0 4px 4px 0;padding:3px}.btn-Arrow-right .arrow-left,.btn-Arrow-left .arrow-left{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.btn-Arrow-right .arrow-right,.btn-Arrow-left .arrow-right{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.btn-Arrow-right{background-image:url(/assets/img/BTN-arrow-right.svg)!important}.btn-Arrow-right:hover{background-image:url(/assets/img/BTN-arrow-right-hov.svg)!important}.btn-Arrow-left{background-image:url(/assets/img/BTN-arrow-left.svg)!important}.btn-Arrow-left:hover{background-image:url(/assets/img/BTN-arrow-left-hov.svg)!important}.new-game-holder{width:100%;height:auto;overflow-x:hidden;cursor:grab;margin:auto;background:none repeat scroll 0 0;position:relative}.game-card{display:flex;flex-direction:column;align-items:center;height:auto;min-height:170px;width:100%;position:relative}@media (max-width: 991px){.game-card{min-height:160px}}@media (max-width: 768px){.game-card{min-height:150px}}@media (max-width: 480px){.game-card{min-height:130px}}.game-card img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;display:block;transition:opacity .3s ease}.game-card img:hover{opacity:.2}.game-card .game-card__text{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;width:100%;min-height:50px;font-size:10px;font-weight:100;padding:10px}@media (max-width: 768px){.game-card .game-card__text{font-size:9px;padding:8px 12px;min-height:45px}}@media (max-width: 480px){.game-card .game-card__text{font-size:8px;padding:6px 10px;min-height:40px}}.game-card .game-card__text .favicon{flex:1;display:flex;justify-content:flex-start}.game-card .game-card__text .cardtext{flex:3;display:flex;justify-content:flex-start;word-break:break-word}swiper-container{--swiper-navigation-size: 20px;width:100%!important}@media (max-width: 768px){swiper-container{--swiper-navigation-size: 16px}}swiper-slide{display:flex;align-items:center;justify-content:center;height:auto!important}.img-gradient{display:inline-block}.gameimage{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.pulse{animation:pulse .4s}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.12)}to{transform:scale(1)}}.category-btn{width:160px;min-width:unset;min-height:45px;font-size:9px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon-search{font-size:10px;padding:0;color:#fff;top:0;position:relative!important;display:inline-flex!important;clear:both}.fa-clock,.fa-fire,.fa-heart{color:#fff!important;font-size:18px;vertical-align:middle}.game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.games-section{width:1280px;max-width:100%;margin:0 auto;padding:0 17px}@media (max-width: 1280px){.games-section{padding:0 20px}}@media (max-width: 768px){.games-section{padding:0 15px}}@media (max-width: 480px){.games-section{padding:0 10px}}.game-card__image-container{position:relative;width:100%;height:100%;display:block}.game-card__action-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;pointer-events:auto}.game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.game-card__image-container:hover img{opacity:.8;transition:opacity .3s ease}.game-card__action-btn--play{cursor:pointer!important;pointer-events:auto!important}.lobby_noGamesMessage{text-align:center;color:#fff;font-weight:700;font-size:20px}.lobby_loadMoreBtn{display:flex;justify-content:center;margin-top:20px}.lobby_loadMoreBtn .load-more-btn{cursor:pointer;color:#fff;font-weight:200;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px;border:1px solid rgb(255,125,0)}#filtered-games-section .lobby_games-row{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}#filtered-games-section .lobby_games-row .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}#filtered-games-section .lobby_games-row .game-card__content{position:relative;cursor:pointer;float:left;width:100%}#filtered-games-section .lobby_games-row .game-card__text.even-bg{background:#000b14}#filtered-games-section .lobby_games-row .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}#filtered-games-section .lobby_games-row .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}#filtered-games-section .lobby_games-row .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}#filtered-games-section .lobby_games-row .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}#filtered-games-section .lobby_games-row .ribbon span.hot{background:#c22026;color:#fff}#filtered-games-section .lobby_games-row .ribbon span.new,#filtered-games-section .lobby_games-row .ribbon span.featured{background:#ff7d00;color:#fff}#filtered-games-section .lobby_games-row .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}#filtered-games-section .lobby_games-row .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}#filtered-games-section .lobby_games-row .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}#filtered-games-section .lobby_games-row .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}#filtered-games-section .lobby_games-row .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.lobby_games-home{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}.lobby_games-home .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}.lobby_games-home .game-card__content{position:relative;cursor:pointer;float:left;width:100%}.lobby_games-home .game-card__text.even-bg{background:#000b14}.lobby_games-home .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}.lobby_games-home .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}.lobby_games-home .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}.lobby_games-home .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}.lobby_games-home .ribbon span.hot{background:#c22026;color:#fff}.lobby_games-home .ribbon span.new,.lobby_games-home .ribbon span.featured{background:#ff7d00;color:#fff}.lobby_games-home .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}.lobby_games-home .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}.lobby_games-home .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.lobby_games-home .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.lobby_games-home .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.lobby_games-home .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.lobby_games-home .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.lobby_games-home .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}\n"] }]
|
|
400
|
+
args: [{ selector: 'lib-casino-lobby', standalone: true, imports: [CommonModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<div class=\"lobby_main-lobby\">\r\n <div class=\"lobby_game-filter-background\" [ngStyle]=\"{ 'background': theme?.background || 'none' }\">\r\n <!-- Main Filter Section -->\r\n <div class=\"lobby_fixed-footer-width lobby_clearfix\" [ngStyle]=\"{ 'border-bottom': theme?.borderSearch || 'none' }\">\r\n <div class=\"display-filter-content\">\r\n <!-- Search Bar -->\r\n <div class=\"lobby_searchBar\">\r\n <div class=\"lobby_game-search\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\">\r\n <form class=\"lobby_form-inline\" (submit)=\"$event.preventDefault()\">\r\n <i class=\"fa fa-search\"></i>\r\n <input #searchInput class=\"lobby_game-search-form\" id=\"searchInput\" name=\"gameSearch\" type=\"text\" placeholder=\"GAME SEARCH\"\r\n aria-label=\"Search\" (input)=\"onSearchChange($event)\" />\r\n </form>\r\n </div>\r\n\r\n <!-- Provider Swiper -->\r\n <div class=\"lobby_swiperContainer\">\r\n <swiper-container #swiperContainer *ngIf=\"providerList && providerList.length\"\r\n slides-per-view=\"1\" space-between=\"6\" speed=\"50\" [loop]=\"shouldLoopProviders()\"\r\n navigation=\"false\" css-mode=\"true\" [breakpoints]=\"{\r\n '100': { slidesPerView: 3 },\r\n '200': { slidesPerView: 4 },\r\n '320': { slidesPerView: 4 },\r\n '480': { slidesPerView: 6 },\r\n '768': { slidesPerView: 8 },\r\n '991': { slidesPerView: 10 },\r\n '1280': { slidesPerView: 12 }\r\n }\">\r\n <swiper-slide *ngFor=\"let provider of providerList\">\r\n <div class=\"lobby_provider-slide-item\">\r\n <img [src]=\"brandConfig?.providersIconsDir + '/' + provider.vendorCode + '.svg'\"\r\n [alt]=\"provider.name\" (click)=\"filterProviderGames(0, provider.vendorCode)\"\r\n loading=\"lazy\" />\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n\r\n <!-- Navigation buttons - OUTSIDE .swiperContainer but INSIDE .searchBar -->\r\n <div class=\"swiper-navigation-row\">\r\n <button class=\"swiper-button-prev\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Previous providers\">\r\n <span class=\"icon-arrow-left-games\"></span>\r\n </button>\r\n\r\n <button class=\"swiper-button-next\"\r\n [ngStyle]=\"{ '--swiper-navigation-color': theme?.buttonBackgroundColor }\"\r\n aria-label=\"Next providers\">\r\n <span class=\"icon-arrow-right-games\"></span>\r\n </button>\r\n </div>\r\n <div class=\"game-provider\">\r\n <div class=\"desktop\">\r\n <ul class=\"f-tabs providerIcons-ul-desktop\">\r\n <li id=\"favouriteIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterFavouriteGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Favorite Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-heart\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Recent Games Icon -->\r\n <li id=\"recentGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterLastPlayedGames()\">\r\n <div id=\"recentGamestt\" style=\"display: none; margin-left: -42px\"\r\n class=\"ttip ttip-arrow\">\r\n Last played Games\r\n <span class=\"arrow-down\" style=\"margin-left: -56px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"recentGames\">\r\n <i class=\"fa fa-clock\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Hot Games Icon -->\r\n <li id=\"hotGamesIcon\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"display-filter-content\" (click)=\"filterHotGames(0, 'hot')\">\r\n <div id=\"hotGamestt\" style=\"display: none; margin-left: -23px\"\r\n class=\"ttip ttip-arrow\">\r\n Hot Games\r\n <span class=\"arrow-down\" style=\"margin-left: -35px\"></span>\r\n </div>\r\n <div class=\"display-filter-content btt\" id=\"hotGames\">\r\n <i class=\"fa fa-fire\"></i>\r\n </div>\r\n </li>\r\n\r\n <!-- Game Category Dropdown -->\r\n <li id=\"gameCategory\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n class=\"game-category-link game-category-link-desktop hidden-xs hidden-sm display-filter-content\">\r\n <a type=\"button\" class=\"category-btn\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"toggleGameCategoryTop()\">\r\n {{ categoryLabel }}\r\n </a>\r\n <a type=\"button\" id=\"gameCategoryLink\" [ngClass]=\"{\r\n 'icon-angle-down': !categoryChosen,\r\n 'icon-close': categoryChosen,\r\n 'pull-right': true\r\n }\" aria-label=\"Toggle category menu\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background': 'transparent'\r\n }\" (click)=\"categoryChosen ? DropdownClose() : toggleGameCategoryTop()\"></a>\r\n\r\n <!-- Game Category Dropdown Menu (positioned directly below) -->\r\n <div id=\"gameCategoryTop\"\r\n class=\"clearfix game-category-list game-category-list-footer\"\r\n [style.display]=\"showGameCategoryTop ? 'block' : 'none'\">\r\n <div class=\"game-category-list-width\">\r\n <ul class=\"game-category-list-item\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.background || '#262626',\r\n 'border': theme?.border || 'none'\r\n }\">\r\n <li class=\"game-category-list-item-li\" *ngFor=\"let group of lobbyGames\"\r\n id=\"{{group.gameGroupDetails.id}}-LeftSideButton-footer\"\r\n (click)=\"categoryLabel = group.gameGroupDetails.name; filterGroupGames(0, group.gameGroupDetails.id)\">\r\n {{ group.gameGroupDetails.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Games Section -->\r\n <div class=\"games-background\" id=\"gamesLobby\" *ngIf=\"!filterActive\">\r\n <div *ngFor=\"let group of lobbyGames; let i = index\" class=\"games-section\">\r\n <div class=\"new-game-header\">\r\n <h3 [ngStyle]=\"{ 'color': theme?.textColor || '#FFFFFF' }\">{{group.gameGroupDetails.name}}</h3>\r\n <div>\r\n <a class=\"btn-newgamestrip\" [ngStyle]=\"{ 'border': (theme?.borderSearch || 'none'),\r\n 'background-color': hoveredViewAllIndex === i ? (theme?.buttonBackgroundColor || '') : (theme?.background || '#262626')\r\n }\" (click)=\"viewGameCategory(group.gameGroupDetails)\" (mouseenter)=\"hoveredViewAllIndex = i\"\r\n (mouseleave)=\"hoveredViewAllIndex = null\">VIEW ALL</a>\r\n <a class=\"lobby_btn-Arrow-left\" [ngClass]=\"{ 'pulse': pulsingButton === 'prev' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'prev' + i ? (theme?.borderSearch || 'none'):'1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Previous games\"\r\n (click)=\"triggerPulse('prev' + i); slidePrev(i)\" (mouseenter)=\"hoveredButton = 'prev' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-left\"></span>\r\n </a>\r\n <a class=\"lobby_btn-Arrow-right\" [ngClass]=\"{ 'pulse': pulsingButton === 'next' + i }\"\r\n [ngStyle]=\"{ 'border': hoveredButton === 'next' + i ? (theme?.borderSearch || 'none') : '1px solid #fff' }\"\r\n style=\"cursor: pointer;\" aria-label=\"Next games\"\r\n (click)=\"triggerPulse('next' + i); slideNext(i)\" (mouseenter)=\"hoveredButton = 'next' + i\"\r\n (mouseleave)=\"hoveredButton = null\">\r\n <span class=\"arrow-icon arrow-right\"></span>\r\n </a>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"swiperContainer\">\r\n <div style=\"overflow-x: auto; white-space: nowrap; width: 100%;\">\r\n <swiper-container #gameSwiperContainer *ngIf=\"group.games && group.games.length\" slides-per-view=\"1\"\r\n space-between=\"10\" speed=\"50\" [loop]=\"shouldLoopGamesForGroup(group.games)\" navigation=\"false\"\r\n css-mode=\"false\" [breakpoints]=\"{\r\n '190': { slidesPerView: 1, spaceBetween: 10 },\r\n '350': { slidesPerView: 2, spaceBetween: 10 },\r\n '520': { slidesPerView: 3, spaceBetween: 10 },\r\n '676': { slidesPerView: 4, spaceBetween: 10 },\r\n '834': { slidesPerView: 4, spaceBetween: 10 },\r\n '998': { slidesPerView: 5, spaceBetween: 10 },\r\n '1158': { slidesPerView: 6, spaceBetween: 10 },\r\n '1280': { slidesPerView: 6, spaceBetween: 10 }\r\n }\">\r\n <swiper-slide *ngFor=\"let game of group.games; let gameIndex = index\"\r\n [attr.data-game-id]=\"i + '-' + game.gameCode\" class=\"lobby_games-home\">\r\n <div class=\"game-card\">\r\n <div class=\"game-card__content\"\r\n (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\"\r\n *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\"\r\n (click)=\"getgameClicked(game.gameCode)\"\r\n style=\"cursor: pointer;\"\r\n >\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\"\r\n (error)=\"onImageError($event)\" [alt]=\"game.name\" loading=\"lazy\"\r\n [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name\r\n }}</span></div>\r\n </div>\r\n </swiper-slide>\r\n </swiper-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- Filtered Games Sections-->\r\n <div class=\"games-background\" id=\"filtered-games-section\" *ngIf=\"filterActive\">\r\n <div class=\"lobby_games-row\">\r\n <div class=\"game-card\" [attr.data-game-id]=\"gameIndex + '-' + game.gameCode\"\r\n *ngFor=\"let game of filteredGames; let gameIndex = index\">\r\n <div class=\"game-card__content\" (mouseenter)=\"hoveredGameKey = gameIndex + '-' + game.gameCode\"\r\n (mouseleave)=\"hoveredGameKey = null\">\r\n <div class=\"game-card__action-btn\" *ngIf=\"hoveredGameKey === gameIndex + '-' + game.gameCode\">\r\n <a class=\"btn game-card__action-btn--play\" [ngStyle]=\"{\r\n 'color': theme?.buttonBackgroundColor || '#ff7d00',\r\n 'border': theme?.borderSearch || '#ff7d00'\r\n }\" (click)=\"getgameClicked(game.gameCode)\" style=\"cursor: pointer;\">\r\n <i class=\"fa fa-play\"></i>\r\n </a>\r\n </div>\r\n <div class=\"ribbon\"><span [ngClass]=\"game.tagList.includes('new') ? 'new' : ''\">{{\r\n game.tagList.includes(\"new\") ? \"NEW\" : \"\" }}</span><span [ngClass]=\"game.tagList.includes('hot') ? 'hot' : ''\">{{\r\n game.tagList.includes(\"hot\") ? \"HOT\" : \"\" }}</span></div>\r\n <div class=\"game-card__img game-card__image-container\">\r\n <img class=\"img-gradient\" [src]=\"getGameImage(game)\" (error)=\"onImageError($event)\"\r\n [alt]=\"game.name\" loading=\"lazy\" [title]=\"game.name\">\r\n </div>\r\n </div>\r\n <div class=\"game-card__text\" [ngStyle]=\"{\r\n 'color': theme?.textColor || '#fff',\r\n 'background-color': theme?.gametextbackground || '#ff7d00'\r\n }\"><span class=\"game-card__favicon\"><i class=\"far fa-heart\"\r\n aria-hidden=\"true\"></i></span><span class=\"game-card--name\">{{ game.name }}</span></div>\r\n </div>\r\n </div>\r\n <div class=\"lobby_loadMoreBtn\" *ngIf=\"filterShowLoadMore\">\r\n <a class=\"btn load-more-btn\" [ngStyle]=\"{ 'border': theme?.borderSearch || 'none' }\"\r\n (click)=\"loadMoreFilteredGames()\">\r\n LOAD MORE\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"games-background lobby_noGamesMessage\" id=\"noGamesMessage\" *ngIf=\"noGamesToShow\">\r\n <p>NO GAMES FOUND</p>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";*{margin:0;padding:0;box-sizing:border-box}.icon-heart-icon-01:before{content:\"\\e93c\"}.icon-heart-icon-02:before{content:\"\\2764\\fe0f\"}.icon-flame-fill:before{content:\"\\1f525\"}.icon-angle-down:before{content:\"\\25bc\"}.icon-close:before{content:\"\\2715\"}.icon-arrow-left-games:before{content:\"<\"}.icon-arrow-right-games:before{content:\">\"}.lobby_clearfix:after{content:\"\";display:table;clear:both}.pull-right{float:right}.pull-left{float:left}.hide{display:none!important}.display-filter-content{display:block;border-radius:3px;width:100%;max-width:1280px;margin:0 auto}.hide-filter-content{display:none}.lobby_main-lobby{width:1280px;width:100%;max-width:1280px;display:block;position:relative;margin:0 auto}.lobby_game-filter-background{width:100%;max-width:var(--max-content-width);display:block;position:relative;margin:0 auto;padding:0 15px;overflow:visible;position:sticky;top:0;z-index:100}@media (max-width: 1280px){.lobby_game-filter-background{padding:0 20px}}@media (max-width: 768px){.lobby_game-filter-background{padding:0 15px}}@media (max-width: 480px){.lobby_game-filter-background{padding:0 10px}}.lobby_fixed-footer-width{width:1280px;max-width:100%;margin:0 auto 5px;padding:10px 15px 10px 5px}@media (max-width: 991px){.lobby_fixed-footer-width{width:100%;padding:10px}}@media (max-width: 768px){.lobby_fixed-footer-width{padding:10px 5px}}.lobby_searchBar{display:flex;align-items:center;gap:10px;flex-wrap:nowrap}@media (max-width: 1200px){.lobby_searchBar{gap:8px}}@media (max-width: 991px){.lobby_searchBar{gap:6px}}@media (max-width: 768px){.lobby_searchBar{flex-wrap:wrap;gap:10px}}.lobby_game-search{padding:2px 6px;border-radius:3px;margin-left:0;color:#a7a9ac;font-weight:600;flex-shrink:0}@media (max-width: 991px){.lobby_game-search{margin-left:0;padding:0 15px}}@media (max-width: 768px){.lobby_game-search{width:100%;margin-left:0}}.lobby_game-search i{padding-left:1px;font-size:15px;color:#fff;position:relative;cursor:pointer}.lobby_form-inline{display:flex;align-items:center}.lobby_game-search-form{background:transparent;color:var(--footer-games-text-color);border-radius:3px;padding:2px 8px;width:160px;height:32px;text-transform:uppercase;border:none;outline:none}@media (max-width: 768px){.lobby_game-search-form{width:100%;max-width:200px}}@media (max-width: 480px){.lobby_game-search-form{font-size:14px}}.lobby_game-search-form::placeholder{color:#a7a9ac}.lobby_swiperContainer{display:flex;align-items:center;flex:1;min-width:0;max-width:54%;overflow:visible}@media (max-width: 991px){.lobby_swiperContainer{max-width:calc(100% + -0px)}}@media (max-width: 768px){.lobby_swiperContainer{width:100%;max-width:100%}}.lobby_swiperContainer swiper-container{width:100%!important;max-width:1280px;overflow:hidden}@media (max-width: 991px){.lobby_swiperContainer swiper-container{max-width:900px}}@media (max-width: 768px){.lobby_swiperContainer swiper-container{max-width:100%}}.lobby_provider-slide-item{padding:4px 7px 7px;font-size:20px;display:flex;align-items:center;justify-content:center;color:#fff}.lobby_provider-slide-item img{width:100%;height:30px;cursor:pointer;object-fit:contain;filter:brightness(0) invert(1)}@media (max-width: 480px){.lobby_provider-slide-item img{height:16px}}.swiper-navigation-row{display:flex;align-items:center;gap:10px;margin-left:10px;flex-shrink:0}@media (max-width: 768px){.swiper-navigation-row{gap:5px;margin-left:5px}}@media (max-width: 480px){.swiper-navigation-row{gap:3px;margin-left:3px}}.swiper-button-next,.swiper-button-prev{position:static!important;background:none;border:none;cursor:pointer;width:auto;height:auto;margin:0;padding:0 8px;display:flex;align-items:center}@media (max-width: 768px){.swiper-button-next,.swiper-button-prev{padding:0 4px}}.swiper-button-next:after,.swiper-button-prev:after{color:inherit}.icon-arrow-left-games,.icon-arrow-right-games{font-size:32px}@media (max-width: 768px){.icon-arrow-left-games,.icon-arrow-right-games{font-size:24px}}.swiper-button-disabled .icon-arrow-left-games,.swiper-button-disabled .icon-arrow-right-games{opacity:.4;cursor:not-allowed}.game-provider{flex-shrink:0;overflow:visible}@media (max-width: 991px){.game-provider{float:right}}@media (max-width: 768px){.game-provider{width:100%;float:none}}.f-tabs{margin:0;padding-left:10px;list-style:none;overflow:visible}@media (max-width: 768px){.f-tabs{padding-left:5px}}.f-tabs li{padding:4px 7px 7px;font-size:17px;margin-right:5px;text-transform:uppercase;color:var(--footer-games-text-color);float:left;cursor:pointer}@media (max-width: 768px){.f-tabs li{font-size:18px;padding:3px 5px 5px;margin-right:3px}}@media (max-width: 480px){.f-tabs li{font-size:16px}}.f-tabs li.btt{border:1px solid #02B0CB;border-radius:3px;margin-right:7px;padding:5px}.f-tabs li.active i{color:#02b0cb}.f-tabs li.active img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)}.f-tabs li i{color:var(--footer-games-text-color)}.f-tabs li img{height:20px;width:20px;filter:brightness(0) saturate(100%) invert(98%) sepia(99%) saturate(2%) hue-rotate(208deg) brightness(101%) contrast(100%)}@media (max-width: 768px){.f-tabs li img{height:18px;width:18px}}.f-tabs li:hover i{color:var(--footer-games-hover-color)}.f-tabs li:hover img{filter:brightness(0) saturate(100%) invert(49%) sepia(96%) saturate(1423%) hue-rotate(150deg) brightness(92%) contrast(103%)!important}.providerIcons-ul-desktop{display:inline-flex;overflow:visible;width:243px;flex-shrink:0}@media (max-width: 991px){.providerIcons-ul-desktop{width:300px}}@media (max-width: 768px){.providerIcons-ul-desktop{width:100%;justify-content:flex-start}}.game-category-link{font-weight:600;color:var(--footer-games-text-color);min-width:130px;padding:5px 10px;text-align:center;font-size:15px;position:relative;overflow:visible!important}@media (max-width: 768px){.game-category-link{min-width:100px;font-size:14px;padding:4px 8px}}.desktop{display:block!important}.mobile{display:none}@media (max-width: 991px){.mobile{display:block}}.game-category-list{background-color:var(--footer-games-cat-list-bg-color);color:var(--footer-games-text-color);border-radius:3px;position:absolute;z-index:9999;top:calc(100% + 5px);right:0;left:auto;display:none;box-shadow:0 4px 8px #0000004d;min-width:260px}@media (max-width: 991px){.game-category-list{right:0;left:auto}}@media (max-width: 768px){.game-category-list{left:50%;right:auto;transform:translate(-50%);width:90vw;max-width:400px}}.game-category-list-width{width:100%;display:flex;justify-content:flex-end}.game-category-list-item{margin:0;padding:0;list-style:none;min-width:257.45px;width:auto;overflow-x:auto;white-space:nowrap;text-align:left;float:none}@media (max-width: 768px){.game-category-list-item{min-width:unset;width:100%}}.game-category-list-item-li{padding:10px 0 10px 15px;font-size:14px;text-transform:uppercase;color:var(--footer-games-text-color);cursor:pointer;font-weight:600;width:50%;float:left}.game-category-list-item-li:hover{color:var(--footer-games-hover-color)!important}.game-category-list-item-li.active{color:#fff;background:#02b0cb}.ttip{position:absolute;margin-top:-38px;border:1px solid #02B0CB;background-color:#192026;border-radius:2px;padding-left:4px;padding-right:4px;font-size:10px;z-index:99999;display:none}.arrow-down{width:0px;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #02B0CB;position:absolute;margin-top:22px}.games-background{width:100%;display:block;position:relative;margin:0 auto;padding:20px 0}@media (max-width: 1280px){.games-background{padding:20px 0}}@media (max-width: 768px){.games-background{padding:15px 0}}@media (max-width: 480px){.games-background{padding:10px 0}}.new-game-header{height:60px;border-bottom:1px solid grey;display:flex;align-items:center;margin-bottom:24px;justify-content:space-between}@media (max-width: 768px){.new-game-header{height:50px;margin-bottom:16px}}@media (max-width: 480px){.new-game-header{flex-direction:column;height:auto;padding:10px 0;align-items:flex-start;gap:10px}}.new-game-header h3{font-size:18px;font-weight:600;margin-left:10px}@media (max-width: 768px){.new-game-header h3{font-size:16px;margin-left:5px}}@media (max-width: 480px){.new-game-header h3{font-size:14px;margin-left:0}}.new-game-header>div{display:flex;align-items:center;gap:10px}@media (max-width: 480px){.new-game-header>div{width:100%;justify-content:space-between}}.btn-newgamestrip{background-color:transparent;font-weight:600;color:#fff;font-size:15px;border-radius:4px;text-align:center;text-decoration:none;width:120px!important;height:auto!important;padding:9.9px 2px!important;cursor:pointer;z-index:3;position:relative}@media (max-width: 768px){.btn-newgamestrip{font-size:13px;width:100px!important;padding:8px 2px!important}}@media (max-width: 480px){.btn-newgamestrip{font-size:12px;width:80px!important;padding:6px 2px!important}}.lobby_btn-Arrow-right,.lobby_btn-Arrow-left{display:flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border-radius:4px}@media (max-width: 768px){.lobby_btn-Arrow-right,.lobby_btn-Arrow-left{width:30px!important;height:30px!important}}@media (max-width: 480px){.lobby_btn-Arrow-right,.lobby_btn-Arrow-left{width:25px!important;height:25px!important}}.lobby_btn-Arrow-right .arrow-icon,.lobby_btn-Arrow-left .arrow-icon{display:inline-block;width:18px;height:18px;border:.5px solid white;border-width:0 4px 4px 0;padding:3px}.lobby_btn-Arrow-right .arrow-left,.lobby_btn-Arrow-left .arrow-left{transform:rotate(135deg);-webkit-transform:rotate(135deg)}.lobby_btn-Arrow-right .arrow-right,.lobby_btn-Arrow-left .arrow-right{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}.lobby_btn-Arrow-right{background-image:url(/assets/img/BTN-arrow-right.svg)!important}.lobby_btn-Arrow-right:hover{background-image:url(/assets/img/BTN-arrow-right-hov.svg)!important}.lobby_btn-Arrow-left{background-image:url(/assets/img/BTN-arrow-left.svg)!important}.lobby_btn-Arrow-left:hover{background-image:url(/assets/img/BTN-arrow-left-hov.svg)!important}.new-game-holder{width:100%;height:auto;overflow-x:hidden;cursor:grab;margin:auto;background:none repeat scroll 0 0;position:relative}.game-card{display:flex;flex-direction:column;align-items:center;height:auto;min-height:170px;width:100%;position:relative}@media (max-width: 991px){.game-card{min-height:160px}}@media (max-width: 768px){.game-card{min-height:150px}}@media (max-width: 480px){.game-card{min-height:130px}}.game-card img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;display:block;transition:opacity .3s ease}.game-card img:hover{opacity:.2}.game-card .game-card__text{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;width:100%;min-height:50px;font-size:10px;font-weight:100;padding:10px}@media (max-width: 768px){.game-card .game-card__text{font-size:9px;padding:8px 12px;min-height:45px}}@media (max-width: 480px){.game-card .game-card__text{font-size:8px;padding:6px 10px;min-height:40px}}.game-card .game-card__text .favicon{flex:1;display:flex;justify-content:flex-start}.game-card .game-card__text .cardtext{flex:3;display:flex;justify-content:flex-start;word-break:break-word}swiper-container{--swiper-navigation-size: 20px;width:100%!important}@media (max-width: 768px){swiper-container{--swiper-navigation-size: 16px}}swiper-slide{display:flex;align-items:center;justify-content:center;height:auto!important}.img-gradient{display:inline-block}.gameimage{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.pulse{animation:pulse .4s}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.12)}to{transform:scale(1)}}.category-btn{width:160px;min-width:unset;min-height:45px;font-size:9px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon-search{font-size:10px;padding:0;color:#fff;top:0;position:relative!important;display:inline-flex!important;clear:both}.fa-clock,.fa-fire,.fa-heart{color:#fff!important;font-size:18px;vertical-align:middle}.game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.games-section{width:1280px;max-width:100%;margin:0 auto;padding:0 17px}@media (max-width: 1280px){.games-section{padding:0 20px}}@media (max-width: 768px){.games-section{padding:0 15px}}@media (max-width: 480px){.games-section{padding:0 10px}}.game-card__image-container{position:relative;width:100%;height:100%;display:block}.game-card__action-btn{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10;pointer-events:auto}.game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.game-card__image-container:hover img{opacity:.8;transition:opacity .3s ease}.game-card__action-btn--play{cursor:pointer!important;pointer-events:auto!important}.lobby_noGamesMessage{text-align:center;color:#fff;font-weight:700;font-size:20px}.lobby_loadMoreBtn{display:flex;justify-content:center;margin-top:20px}.lobby_loadMoreBtn .load-more-btn{cursor:pointer;color:#fff;font-weight:200;border-radius:4px;font-size:1rem;padding:18px 36px;letter-spacing:1px;border:1px solid rgb(255,125,0)}#filtered-games-section .lobby_games-row{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}#filtered-games-section .lobby_games-row .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}#filtered-games-section .lobby_games-row .game-card__content{position:relative;cursor:pointer;float:left;width:100%}#filtered-games-section .lobby_games-row .game-card__text.even-bg{background:#000b14}#filtered-games-section .lobby_games-row .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}#filtered-games-section .lobby_games-row .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}#filtered-games-section .lobby_games-row .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}#filtered-games-section .lobby_games-row .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}#filtered-games-section .lobby_games-row .ribbon span.hot{background:#c22026;color:#fff}#filtered-games-section .lobby_games-row .ribbon span.new,#filtered-games-section .lobby_games-row .ribbon span.featured{background:#ff7d00;color:#fff}#filtered-games-section .lobby_games-row .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}#filtered-games-section .lobby_games-row .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}#filtered-games-section .lobby_games-row .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}#filtered-games-section .lobby_games-row .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}#filtered-games-section .lobby_games-row .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}#filtered-games-section .lobby_games-row .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}.lobby_games-home{width:100%;clear:both;display:grid;height:100%;margin-left:-3px;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));grid-auto-rows:minmax(188px,188px)}.lobby_games-home .game-card{width:180px;float:left;margin:0 0 20px 20px;box-sizing:border-box;display:inline-block}.lobby_games-home .game-card__content{position:relative;cursor:pointer;float:left;width:100%}.lobby_games-home .game-card__text.even-bg{background:#000b14}.lobby_games-home .game-card__text{float:left;width:100%;background:#000b14;padding:10px;min-height:50px;max-height:50px;overflow:hidden;text-align:left;display:flex;align-items:center;border-radius:0 0 3px 3px}.lobby_games-home .game-card__favicon{font-size:24px;width:24px;cursor:pointer;display:table-cell;vertical-align:top}.lobby_games-home .game-card--name{font-size:11px;display:table-cell;vertical-align:middle;text-transform:uppercase;padding-left:8px;line-height:1.1;color:#fff;word-break:normal;hyphens:none;text-overflow:ellipsis;overflow:hidden}.lobby_games-home .ribbon{position:absolute;right:0;top:0;z-index:1;overflow:hidden;width:45px;height:24px;text-align:center}.lobby_games-home .ribbon span.hot{background:#c22026;color:#fff}.lobby_games-home .ribbon span.new,.lobby_games-home .ribbon span.featured{background:#ff7d00;color:#fff}.lobby_games-home .ribbon span{font-family:NunitoSans,sans-serif;font-size:13px;font-weight:600;color:#fff;text-transform:uppercase;text-align:center;line-height:24px;width:45px;display:block;position:absolute;top:0;left:0;border-radius:3px}.lobby_games-home .game-card__img{display:block;width:100%;height:auto;position:relative;overflow:hidden;padding:66.48% 0 0;line-height:66.48px;text-align:center;font-size:12px;background-color:#262626;color:#fff;border-radius:3px 3px 0 0}.lobby_games-home .game-card__img img{display:block;height:auto;max-width:100%;max-height:100%;position:absolute;inset:0;margin:auto}.lobby_games-home .game-card__image-container img{width:100%;height:100%;object-fit:cover;display:block}.lobby_games-home .game-card__action-btn{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:2;display:flex;justify-content:center;align-items:center;pointer-events:none}.lobby_games-home .game-card__action-btn .game-card__action-btn--play{pointer-events:auto;background:transparent;border:2px solid #fff;border-radius:50%;padding:0;width:60px;height:60px;font-size:1.5rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #0000004d;transition:all .2s;display:flex;align-items:center;justify-content:center}@media (max-width: 768px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:50px;height:50px;font-size:1.2rem}}@media (max-width: 480px){.lobby_games-home .game-card__action-btn .game-card__action-btn--play{width:40px;height:40px;font-size:1rem}}.lobby_games-home .game-card__action-btn .game-card__action-btn--play i{margin-left:3px}.lobby_games-home .game-card__action-btn .game-card__action-btn--play:hover{background:#fff3;transform:scale(1.1)}\n"] }]
|
|
401
401
|
}], ctorParameters: () => [{ type: i1.GameLobbyThemeService }, { type: i2.GameLobbyLibService }], propDecorators: { swiperContainer: [{
|
|
402
402
|
type: ViewChild,
|
|
403
403
|
args: ['swiperContainer']
|
|
@@ -418,4 +418,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
418
418
|
type: ViewChild,
|
|
419
419
|
args: ['searchInput']
|
|
420
420
|
}] } });
|
|
421
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzaW5vLWxvYmJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbWUtbG9iYnktbGliL3NyYy9saWIvY2FzaW5vLWxvYmJ5L2Nhc2luby1sb2JieS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Nhc2luby1sb2JieS9jYXNpbm8tbG9iYnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFvQyxzQkFBc0IsRUFBRSxZQUFZLEVBQXlCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBV3BFLE1BQU0sT0FBTyxvQkFBb0I7SUFpQy9CLFlBQVksWUFBbUMsRUFBVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQWhDakcsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUNwQyxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFHM0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzFDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFOUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBVSxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7UUFDM0Qsa0JBQWEsR0FBa0IsSUFBSSxDQUFD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O2dCQUN6QixXQUFXO3NCQUFwQixNQUFNO2dCQUNFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQXFCb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWUgfSBmcm9tICcuLi90aGVtZS9kZWZhdWx0LXRoZW1lJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWVTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2JieUdhbWVzLCBHYW1lR3JvdXAsIEdhbWVHcm91cHNSZXNwb25zZSwgR2FtZUxvYmJ5IH0gZnJvbSAnLi4vZ2FtZS1sb2JieS1saWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEdhbWVMb2JieUxpYlNlcnZpY2UgfSBmcm9tICcuLi9nYW1lLWxvYmJ5LWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYXNpbm8tbG9iYnknLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNpbm8tbG9iYnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jYXNpbm8tbG9iYnkuY29tcG9uZW50LnNjc3MnLFxyXG4gIC8vIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIENhc2lub0xvYmJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBob3ZlcmVkU2xpZGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgaG92ZXJlZEJ1dHRvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgaG92ZXJlZEdhbWVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBWaWV3Q2hpbGQoJ3N3aXBlckNvbnRhaW5lcicpIHN3aXBlckNvbnRhaW5lcjogYW55O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2dhbWVTd2lwZXJDb250YWluZXInKSBnYW1lU3dpcGVyQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAT3V0cHV0KCkgZ2FtZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSBjYXNpbm9EYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgdGhlbWU/OiBHYW1lTG9iYnlUaGVtZTtcclxuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBicmFuZENvbmZpZzogYW55O1xyXG4gIHdlYnNpdGVDb2RlOiBzdHJpbmcgPSAnJztcclxuICBwcm92aWRlckxpc3Q6IGFueVtdID0gW107IC8vIEZJWDogSW5pdGlhbGl6ZSBhcyBlbXB0eSBhcnJheVxyXG4gIHB1bHNpbmdCdXR0b246IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNob3dHYW1lQ2F0ZWdvcnlUb3AgPSBmYWxzZTtcclxuICBjYXRlZ29yeUNob3NlbiA9IGZhbHNlO1xyXG4gIGNhdGVnb3J5TGFiZWw6IHN0cmluZyA9ICdDQVRFR09SWSc7XHJcbiAgc29ydGVkR2FtZUdyb3VwTGlzdDogYW55W10gPSBbXTsgLy8gRklYOiBJbml0aWFsaXplIGFzIGVtcHR5IGFycmF5IGluc3RlYWQgb2YgdW5kZWZpbmVkXHJcbiAgaG92ZXJlZFZpZXdBbGxJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qIGdhbWVzIGxvZ2ljICovXHJcbiAgbG9iYnlHYW1lczogTG9iYnlHYW1lc1tdID0gW107XHJcbiAgc29ydGVkR2FtZUdyb3VwOiBHYW1lR3JvdXBbXSA9IFtdO1xyXG4gIGZpbHRlcmVkR2FtZXM6IGFueSB8IG51bGwgPSBudWxsO1xyXG4gIGZpbHRlclNob3dMb2FkTW9yZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRGaWx0ZXJQYWdlOiBudW1iZXIgPSAwO1xyXG4gIG5vR2FtZXNUb1Nob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBjdXJyZW50U2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgY3VycmVudFNlYXJjaFBhcmFtczogYW55ID0ge307XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcih0aGVtZVNlcnZpY2U6IEdhbWVMb2JieVRoZW1lU2VydmljZSwgcHJpdmF0ZSBnYW1lTG9iYnlMaWJTZXJ2aWNlOiBHYW1lTG9iYnlMaWJTZXJ2aWNlKSB7XHJcbiAgICB0aGVtZVNlcnZpY2UudGhlbWUkLnN1YnNjcmliZSh0ID0+ICh0aGlzLnRoZW1lID0gdCkpO1xyXG4gIH1cclxuXHJcbiAgc2xpZGVOZXh0KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHN3aXBlckVsID0gdGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHN3aXBlckVsPy5zd2lwZXIpIHtcclxuICAgICAgc3dpcGVyRWwuc3dpcGVyLnNsaWRlTmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2xpZGVQcmV2KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHN3aXBlckVsID0gdGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHN3aXBlckVsPy5zd2lwZXIpIHtcclxuICAgICAgc3dpcGVyRWwuc3dpcGVyLnNsaWRlUHJldigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEdhbWVzUHJvdmlkZXJzKCk7IC8vIEZldGNoIHByb3ZpZGVycyBsaXN0XHJcbiAgICB0aGlzLmxvYWRMb2JieUdhbWVzKGZhbHNlKTsgLy8gTG9hZCBnYW1lcyBmb3Igbm9uLWxvZ2dlZCBpbiB1c2VycyBieSBkZWZhdWx0XHJcbiAgICB0aGlzLnNlYXJjaFN1YmplY3RcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyB3YWl0IDIwMDBtcyBhZnRlciB0eXBpbmcgc3RvcHNcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCAvLyAgaWdub3JlIHNhbWUgdGV4dFxyXG4gICAgICAgIHN3aXRjaE1hcCgoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJQYWdlID0gMDsgLy8gcmVzZXQgcGFnZVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgIHNpemU6IHRoaXMuYnJhbmRDb25maWcubG9hZE1vcmVQYWdlU2l6ZSxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VJZDogdGhpcy5icmFuZENvbmZpZz8ubGFuZ0NvZGUsXHJcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHNlYXJjaFRleHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nYW1lTG9iYnlMaWJTZXJ2aWNlLmdldEdhbWVzKFxyXG4gICAgICAgICAgICB0aGlzLmJyYW5kQ29uZmlnPy5hcGlVcmwsXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFBhcmFtcyxcclxuICAgICAgICAgICAgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChnYW1lczogYW55W10pID0+IHtcclxuICAgICAgICBpZiAoIWdhbWVzKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyU2hvd0xvYWRNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSBnYW1lcztcclxuICAgICAgICB0aGlzLmZpbHRlclNob3dMb2FkTW9yZSA9XHJcbiAgICAgICAgICBnYW1lcy5sZW5ndGggPT09IHRoaXMuYnJhbmRDb25maWcubG9hZE1vcmVQYWdlU2l6ZTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VhcmNoVGV4dC50cmltKCkgIT09ICcnICYmIHRoaXMuY3VycmVudFNlYXJjaFRleHQgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVGaWx0ZXIoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRmlsdGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplUHJvdmlkZXJTd2lwZXIoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplR2FtZVN3aXBlcnMoKTtcclxuICAgIH0sIDIwMDApO1xyXG4gICAgdGhpcy50cmlnZ2VyUHVsc2UoJycpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZSA/PyAnJztcclxuICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHZhbHVlLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVQcm92aWRlclN3aXBlcigpIHtcclxuICAgIGlmICh0aGlzLnN3aXBlckNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBjb25zdCBwcm92aWRlclN3aXBlckVsID0gdGhpcy5zd2lwZXJDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID0gcHJvdmlkZXJTd2lwZXJFbC5jbG9zZXN0KCcubG9iYnlfc2VhcmNoQmFyJykgfHwgcHJvdmlkZXJTd2lwZXJFbC5jbG9zZXN0KCcuZml4ZWQtZm9vdGVyLXdpZHRoJyk7XHJcbiAgICAgIGNvbnN0IHByZXZCdXR0b24gPSBwYXJlbnRDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItYnV0dG9uLXByZXYnKTtcclxuICAgICAgY29uc3QgbmV4dEJ1dHRvbiA9IHBhcmVudENvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcignLnN3aXBlci1idXR0b24tbmV4dCcpO1xyXG5cclxuICAgICAgaWYgKHByZXZCdXR0b24gJiYgbmV4dEJ1dHRvbikge1xyXG4gICAgICAgIHByZXZCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBwcm92aWRlclN3aXBlckVsLnN3aXBlcj8uc2xpZGVQcmV2KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbmV4dEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIHByb3ZpZGVyU3dpcGVyRWwuc3dpcGVyPy5zbGlkZU5leHQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplR2FtZVN3aXBlcnMoKSB7XHJcbiAgICBpZiAodGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycyAmJiB0aGlzLmdhbWVTd2lwZXJDb250YWluZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycy5mb3JFYWNoKChzd2lwZXJSZWYsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ2FtZVN3aXBlckVsID0gc3dpcGVyUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vIEZpbmQgdGhlIHBhcmVudCBnYW1lcy1zZWN0aW9uIGZvciB0aGlzIHNwZWNpZmljIHN3aXBlclxyXG4gICAgICAgIGNvbnN0IGdhbWVzU2VjdGlvbiA9IGdhbWVTd2lwZXJFbC5jbG9zZXN0KCcuZ2FtZXMtc2VjdGlvbicpO1xyXG5cclxuICAgICAgICBpZiAoZ2FtZXNTZWN0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXN0b21QcmV2ID0gZ2FtZXNTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJy5idG4tQXJyb3ctbGVmdCcpO1xyXG4gICAgICAgICAgY29uc3QgY3VzdG9tTmV4dCA9IGdhbWVzU2VjdGlvbi5xdWVyeVNlbGVjdG9yKCcuYnRuLUFycm93LXJpZ2h0Jyk7XHJcblxyXG4gICAgICAgICAgaWYgKGN1c3RvbVByZXYpIHtcclxuICAgICAgICAgICAgY3VzdG9tUHJldi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgR2FtZSBzZWN0aW9uICR7aW5kZXh9IC0gUHJldmlvdXMgY2xpY2tlZGApO1xyXG4gICAgICAgICAgICAgIGdhbWVTd2lwZXJFbC5zd2lwZXI/LnNsaWRlUHJldigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjdXN0b21OZXh0KSB7XHJcbiAgICAgICAgICAgIGN1c3RvbU5leHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYEdhbWUgc2VjdGlvbiAke2luZGV4fSAtIE5leHQgY2xpY2tlZGApO1xyXG4gICAgICAgICAgICAgIGdhbWVTd2lwZXJFbC5zd2lwZXI/LnNsaWRlTmV4dCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRklYOiBVcGRhdGVkIGxvb3AgbG9naWMgdG8gcHJldmVudCBTd2lwZXIgbG9vcCB3YXJuaW5nc1xyXG4gIC8vIE9ubHkgZW5hYmxlIGxvb3Agd2hlbiB3ZSBoYXZlIG1vcmUgc2xpZGVzIHRoYW4gdGhlIG1heGltdW0gc2xpZGVzUGVyVmlld1xyXG4gIHNob3VsZExvb3BQcm92aWRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMucHJvdmlkZXJMaXN0IHx8ICFBcnJheS5pc0FycmF5KHRoaXMucHJvdmlkZXJMaXN0KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF4IHNsaWRlc1BlclZpZXcgaXMgMTIgYXQgdGhlIDEyODBweCBicmVha3BvaW50XHJcbiAgICAvLyBPbmx5IGVuYWJsZSBsb29wIGlmIHdlIGhhdmUgbW9yZSBwcm92aWRlcnMgdGhhbiB3aGF0J3MgdmlzaWJsZVxyXG4gICAgY29uc3QgbWF4U2xpZGVzUGVyVmlldyA9IDEyO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJMaXN0Lmxlbmd0aCA+IG1heFNsaWRlc1BlclZpZXc7XHJcbiAgfVxyXG5cclxuICBzaG91bGRMb29wR2FtZXMoZ2FtZXM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWdhbWVzIHx8ICFBcnJheS5pc0FycmF5KGdhbWVzKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF4IHNsaWRlc1BlclZpZXcgaXMgOCBhdCB0aGUgMTI4MHB4IGJyZWFrcG9pbnRcclxuICAgIC8vIE9ubHkgZW5hYmxlIGxvb3AgaWYgd2UgaGF2ZSBtb3JlIGdhbWVzIHRoYW4gd2hhdCdzIHZpc2libGVcclxuICAgIGNvbnN0IG1heFNsaWRlc1BlclZpZXcgPSA4O1xyXG4gICAgcmV0dXJuIGdhbWVzLmxlbmd0aCA+IG1heFNsaWRlc1BlclZpZXc7XHJcbiAgfVxyXG5cclxuICAvLyBORVc6IFBlci1ncm91cCBsb29wIGxvZ2ljIGZvciBnYW1lIHN3aXBlcnNcclxuICAvLyBUaGlzIGNoZWNrcyBlYWNoIGdhbWUgZ3JvdXAgaW5kaXZpZHVhbGx5IHRvIGRldGVybWluZSBpZiBsb29wIHNob3VsZCBiZSBlbmFibGVkXHJcbiAgc2hvdWxkTG9vcEdhbWVzRm9yR3JvdXAoZ2FtZXM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWdhbWVzIHx8ICFBcnJheS5pc0FycmF5KGdhbWVzKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF4IHNsaWRlc1BlclZpZXcgaXMgOCBhdCB0aGUgMTI4MHB4IGJyZWFrcG9pbnRcclxuICAgIC8vIE9ubHkgZW5hYmxlIGxvb3AgaWYgdGhpcyBzcGVjaWZpYyBncm91cCBoYXMgbW9yZSBnYW1lcyB0aGFuIHdoYXQncyB2aXNpYmxlXHJcbiAgICBjb25zdCBtYXhTbGlkZXNQZXJWaWV3ID0gODtcclxuICAgIHJldHVybiBnYW1lcy5sZW5ndGggPiBtYXhTbGlkZXNQZXJWaWV3O1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlclB1bHNlKGJ1dHRvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnB1bHNpbmdCdXR0b24gPSBidXR0b247XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wdWxzaW5nQnV0dG9uID0gbnVsbDtcclxuICAgIH0sIDQwMCk7IC8vIER1cmF0aW9uIHNob3VsZCBtYXRjaCB0aGUgYW5pbWF0aW9uXHJcbiAgfVxyXG5cclxuICB0b2dnbGVHYW1lQ2F0ZWdvcnlUb3AoKSB7XHJcbiAgICB0aGlzLnNob3dHYW1lQ2F0ZWdvcnlUb3AgPSAhdGhpcy5zaG93R2FtZUNhdGVnb3J5VG9wO1xyXG4gICAgdGhpcy5jYXRlZ29yeUNob3NlbiA9IHRoaXMuY2F0ZWdvcnlMYWJlbCAhPT0gJ0NBVEVHT1JZJztcclxuICAgIGlmICh0aGlzLmNhdGVnb3J5TGFiZWwgPT0gJ0NBVEVHT1JZJykge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGVGaWx0ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZpZXdHYW1lQ2F0ZWdvcnkoZ3JvdXA6IGFueSkge1xyXG4gICAgdGhpcy5jYXRlZ29yeUxhYmVsID0gZ3JvdXAubmFtZTtcclxuICAgIHRoaXMuc2hvd0dhbWVDYXRlZ29yeVRvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWx0ZXJHcm91cEdhbWVzKDAsIGdyb3VwLmlkKTtcclxuICB9XHJcblxyXG4gIERyb3Bkb3duQ2xvc2UoKSB7XHJcbiAgICB0aGlzLmNhdGVnb3J5TGFiZWwgPT09ICdDQVRFR09SWScgPyB0aGlzLmNhdGVnb3J5Q2hvc2VuID0gZmFsc2UgOiB0aGlzLmNhdGVnb3J5Q2hvc2VuID0gdHJ1ZTtcclxuICAgIHRoaXMuY2F0ZWdvcnlDaG9zZW4gPyB0aGlzLmNhdGVnb3J5TGFiZWwgPSAnQ0FURUdPUlknIDogdGhpcy5jYXRlZ29yeUxhYmVsO1xyXG4gICAgIXRoaXMuY2F0ZWdvcnlDaG9zZW4gPyB0aGlzLmNhdGVnb3J5Q2hvc2VuID0gdHJ1ZSA6IHRoaXMuY2F0ZWdvcnlDaG9zZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0dhbWVDYXRlZ29yeVRvcCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlMYWJlbCA9PSAnQ0FURUdPUlknKSB7XHJcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgXHJcblxyXG4gIGdldEdhbWVJbWFnZShnYW1lOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFnYW1lPy5nYW1lQ29kZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5icmFuZENvbmZpZy5kZWZhdWx0R2FtZUltYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgJHt0aGlzLmJyYW5kQ29uZmlnPy5nYW1lc0ltYWdlc0Rpcn0vJHtnYW1lLmdhbWVDb2RlfS8ke2dhbWUuZ2FtZUNvZGV9LndlYnBgO1xyXG4gIH1cclxuXHJcbiAgb25JbWFnZUVycm9yKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BcclxuICAgIGlmIChpbWcuc3JjLmluY2x1ZGVzKCdkZWZhdWx0LWdhbWUtaW1hZ2UuanBnJykpIHJldHVybjtcclxuICAgIGltZy5zcmMgPSB0aGlzLmJyYW5kQ29uZmlnLmRlZmF1bHRHYW1lSW1hZ2U7XHJcbiAgfVxyXG5cclxuICAvLyBHYW1lcyBmaWx0ZXJzXHJcbiAgZmlsdGVyR3JvdXBHYW1lcyhjdXJyZW50UGFnZTogbnVtYmVyLCBnYW1lR3JvdXBJZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNob3dHYW1lQ2F0ZWdvcnlUb3AgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgIHRoaXMuZ2V0RmlsdGVyZWRHYW1lcyhjdXJyZW50UGFnZSwgdGhpcy5icmFuZENvbmZpZy5sb2FkTW9yZVBhZ2VTaXplLCB7IGdhbWVHcm91cElkOiBnYW1lR3JvdXBJZCB9KTtcclxuICAgIHRoaXMuYWN0aXZhdGVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclByb3ZpZGVyR2FtZXMoY3VycmVudFBhZ2U6IG51bWJlciwgdmVuZG9yaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5jbGVhclNlYXJjaCgpO1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJlZEdhbWVzKGN1cnJlbnRQYWdlLCB0aGlzLmJyYW5kQ29uZmlnLmxvYWRNb3JlUGFnZVNpemUsIHsgdmVuZG9ySWQ6IHZlbmRvcmlkIH0pO1xyXG4gICAgdGhpcy5hY3RpdmF0ZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVySG90R2FtZXMoY3VycmVudFBhZ2U6IG51bWJlciwgdGFnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgIHRoaXMuZ2V0RmlsdGVyZWRHYW1lcyhjdXJyZW50UGFnZSwgdGhpcy5icmFuZENvbmZpZy5sb2FkTW9yZVBhZ2VTaXplLCB7IHRhZzogdGFnIH0pO1xyXG4gICAgdGhpcy5hY3RpdmF0ZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRmF2b3VyaXRlR2FtZXMoKSB7XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XHJcbiAgICB0aGlzLmdldEZhdm91cml0ZUdhbWVzKCk7XHJcbiAgICB0aGlzLmFjdGl2YXRlRmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJMYXN0UGxheWVkR2FtZXMoKSB7XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XHJcbiAgICB0aGlzLmdldExhc3RQbGF5ZWQoKTtcclxuICAgIHRoaXMuYWN0aXZhdGVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGxvYWRNb3JlRmlsdGVyZWRHYW1lcygpIHtcclxuICAgIHRoaXMuY3VycmVudFNlYXJjaFBhcmFtcy5wYWdlID0gdGhpcy5jdXJyZW50RmlsdGVyUGFnZSArIDE7IC8vIEluY3JlbWVudCBwYWdlIGZvciBuZXh0IGxvYWRcclxuICAgIHRoaXMuZ2V0RmlsdGVyZWRHYW1lcyh0aGlzLmN1cnJlbnRGaWx0ZXJQYWdlLCB0aGlzLmJyYW5kQ29uZmlnLmxvYWRNb3JlUGFnZVNpemUsIHRoaXMuY3VycmVudFNlYXJjaFBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDbGVhcmluZyBzZWFyY2ggaW5wdXQgYW5kIHJlc2V0dGluZyBmaWx0ZXJzJyk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudFNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuY3VycmVudEZpbHRlclBhZ2UgPSAwO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlckFjdGl2ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlRmlsdGVyKCkge1xyXG4gICAgdGhpcy5maWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlcmVkR2FtZXMoXHJcbiAgICBjdXJyZW50UGFnZU51bWJlcjogbnVtYmVyLFxyXG4gICAgcGFnZVNpemU6IG51bWJlcixcclxuICAgIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgKSB7XHJcbiAgICBjb25zdCBiYXNlUGFyYW1zID0ge1xyXG4gICAgICBwYWdlOiBjdXJyZW50UGFnZU51bWJlciArIDEsXHJcbiAgICAgIHNpemU6IHBhZ2VTaXplLFxyXG4gICAgICBsYW5ndWFnZUlkOiB0aGlzLmJyYW5kQ29uZmlnPy5sYW5nQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcclxuICAgICAgLi4uYmFzZVBhcmFtcyxcclxuICAgICAgLi4uKGZpbHRlcnMgfHwge30pXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXJyZW50U2VhcmNoUGFyYW1zID0gcXVlcnlQYXJhbXM7IC8vIFN0b3JlIGN1cnJlbnQgc2VhcmNoIHBhcmFtcyBmb3IgbG9hZCBtb3JlIGZ1bmN0aW9uYWxpdHlcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRHYW1lcyhcclxuICAgICAgdGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLFxyXG4gICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH1cclxuICAgICkuc3Vic2NyaWJlKChnYW1lczogYW55W10pID0+IHtcclxuXHJcbiAgICAgIGlmICghZ2FtZXMpIHtcclxuICAgICAgICB0aGlzLmZpbHRlclNob3dMb2FkTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgZmlyc3QgcGFnZSAtIHJlcGxhY2VcclxuICAgICAgaWYgKGN1cnJlbnRQYWdlTnVtYmVyID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEdhbWVzID0gZ2FtZXM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgbmV4dCBwYWdlIC0gYXBwZW5kXHJcbiAgICAgIGVsc2UgaWYgKGN1cnJlbnRQYWdlTnVtYmVyID4gMCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRHYW1lcyA9IFtcclxuICAgICAgICAgIC4uLnRoaXMuZmlsdGVyZWRHYW1lcyxcclxuICAgICAgICAgIC4uLmdhbWVzXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJZiByZXR1cm5lZCBjb3VudCA9PT0gcGFnZVNpemUgLSBtb3JlIGdhbWVzIG1pZ2h0IGV4aXN0XHJcbiAgICAgIHRoaXMuZmlsdGVyU2hvd0xvYWRNb3JlID0gZ2FtZXMubGVuZ3RoID09PSBwYWdlU2l6ZTtcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyUGFnZSA9IGN1cnJlbnRQYWdlTnVtYmVyICsgMTsgLy8gVXBkYXRlIGN1cnJlbnQgcGFnZVxyXG4gICAgICBpZiAoIXRoaXMuZmlsdGVyU2hvd0xvYWRNb3JlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyUGFnZSA9IDA7IC8vIFJlc2V0IHRvIGZpcnN0IHBhZ2UgaWYgbm8gbW9yZSBnYW1lc1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgY29uc29sZS5sb2coJ0ZpbHRlcmVkIEdhbWVzOicsIHRoaXMuZmlsdGVyZWRHYW1lcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTaG93IExvYWQgTW9yZTonLCB0aGlzLmZpbHRlclNob3dMb2FkTW9yZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBHZXQgR2FtZXNcclxuICBnZXRHYW1lcyhwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRHYW1lcyhcclxuICAgICAgdGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLFxyXG4gICAgICB7IHBhZ2U6IHBhZ2VOdW1iZXIsIHNpemU6IHBhZ2VTaXplLCBsYW5ndWFnZUlkOiB0aGlzLmJyYW5kQ29uZmlnPy5sYW5nQ29kZSB9LFxyXG4gICAgICB7IHJlZmVyZXI6IHRoaXMuYnJhbmRDb25maWc/LnNpdGVVcmwgfVxyXG4gICAgKS5zdWJzY3JpYmUoZ2FtZXMgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnR2FtZXM6JywgZ2FtZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIExhc3QgUGxheWVkXHJcbiAgZ2V0TGFzdFBsYXllZCgpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRHYW1lcyA9IFtdOyAvLyBSZXNldCBiZWZvcmUgbG9hZGluZyBuZXcgb25lc1xyXG4gICAgdGhpcy5nYW1lTG9iYnlMaWJTZXJ2aWNlLmdldExhc3RQbGF5ZWQoXHJcbiAgICAgIHRoaXMuYnJhbmRDb25maWc/LmFwaVVybCxcclxuICAgICAgeyBsYW5ndWFnZUlkOiB0aGlzLmJyYW5kQ29uZmlnPy5sYW5nQ29kZSB9LFxyXG4gICAgICB7IHJlZmVyZXI6IHRoaXMuYnJhbmRDb25maWc/LnNpdGVVcmwgfVxyXG4gICAgKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKCFyZXMgfHwgIXJlcy5zdGF0dXMgfHwgcmVzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBsYXN0IHBsYXllZCBnYW1lczonLCByZXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSByZXMuZ2FtZXNMaXN0O1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIEZhdm91cml0ZXNcclxuICBnZXRGYXZvdXJpdGVHYW1lcygpIHtcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRGYXZvdXJpdGVHYW1lcyhcclxuICAgICAgdGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLFxyXG4gICAgICB7IGxhbmd1YWdlSWQ6IHRoaXMuYnJhbmRDb25maWc/LmxhbmdDb2RlIH0sXHJcbiAgICAgIHsgcmVmZXJlcjogdGhpcy5icmFuZENvbmZpZz8uc2l0ZVVybCB9XHJcbiAgICApLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAoIXJlcyB8fCAhcmVzLnN0YXR1cyB8fCByZXMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgIT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGZhdm91cml0ZSBnYW1lczonLCByZXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSByZXMuZ2FtZXNMaXN0O1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIFByb3ZpZGVyc1xyXG4gIGdldEdhbWVzUHJvdmlkZXJzKCkge1xyXG4gICAgdGhpcy5nYW1lTG9iYnlMaWJTZXJ2aWNlLmdldEdhbWVzUHJvdmlkZXJzKFxyXG4gICAgICB0aGlzLmJyYW5kQ29uZmlnPy5hcGlVcmwsXHJcbiAgICAgIHsgbGFuZ3VhZ2VJZDogdGhpcy5icmFuZENvbmZpZz8ubGFuZ0NvZGUgfSxcclxuICAgICAgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH1cclxuICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQcm92aWRlcnM6JywgcmVzPy5nYW1lUHJvdmlkZXJzTGlzdC5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnByb3ZpZGVyTGlzdCA9IHJlcz8uZ2FtZVByb3ZpZGVyc0xpc3QgfHwgW107XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRMb2JieUdhbWVzKGlzTG9nZ2VkSW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIGxvYmJ5IGdhbWVzIGZvcicsIGlzTG9nZ2VkSW4gPyAnbG9nZ2VkIGluIHVzZXInIDogJ2d1ZXN0IHVzZXInKTtcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRHYW1lc0dyb3Vwcyh0aGlzLmJyYW5kQ29uZmlnPy5hcGlVcmwsIHsgbGFuZ3VhZ2VJZDogdGhpcy5icmFuZENvbmZpZz8ubGFuZ0NvZGUgfSwgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH0pLnBpcGUoXHJcbiAgICAgIC8qIFN0ZXAgMTogU2VsZWN0IGNvcnJlY3QgbG9iYnkgc2FmZWx5ICovXHJcbiAgICAgIG1hcCgobG9iYmllczogR2FtZUdyb3Vwc1Jlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmICghbG9iYmllcyB8fCAhbG9iYmllcy5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTG9iYnk6IEdhbWVMb2JieSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgLy8gSWYgb25seSBvbmUgbG9iYnkgcmV0dXJuZWQgdXNlIGl0XHJcbiAgICAgICAgaWYgKGxvYmJpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZExvYmJ5ID0gbG9iYmllc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgbXVsdGlwbGUgYXBwbHkgbG9naW4gbG9naWNcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGVkTG9iYnkgPSBpc0xvZ2dlZEluXHJcbiAgICAgICAgICAgID8gbG9iYmllcy5maW5kKGwgPT4gbC50aXRsZS5pbmNsdWRlcygnSG9tZSBMb2JieScpKVxyXG4gICAgICAgICAgICA6IGxvYmJpZXMuZmluZChsID0+ICFsLnRpdGxlLmluY2x1ZGVzKCdIb21lIExvYmJ5JykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZExvYmJ5Py5nYW1lR3JvdXBMaXN0Py5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgLy8gU29ydCBieSBvcmRlclxyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZExvYmJ5LmdhbWVHcm91cExpc3RcclxuICAgICAgICAgIC5zbGljZSgpXHJcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5nYW1lX2dyb3VwX29yZGVyIC0gYi5nYW1lX2dyb3VwX29yZGVyKTtcclxuICAgICAgfSksXHJcblxyXG4gICAgICB0YXAoc29ydGVkR3JvdXBzID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRlZEdhbWVHcm91cCA9IHNvcnRlZEdyb3VwcztcclxuICAgICAgfSksXHJcblxyXG4gICAgICAvKiBTdGVwIDI6IEZldGNoIGdhbWVzIGluIHBhcmFsbGVsICovXHJcbiAgICAgIHN3aXRjaE1hcCgoc29ydGVkR3JvdXBzOiBHYW1lR3JvdXBbXSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoIXNvcnRlZEdyb3Vwcy5sZW5ndGgpIHJldHVybiBvZihbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RzID0gc29ydGVkR3JvdXBzXHJcbiAgICAgICAgICAuZmlsdGVyKGdyb3VwID0+IGdyb3VwLm5hbWUgJiYgZ3JvdXAubmFtZS50cmltKCkgIT09ICcnKVxyXG4gICAgICAgICAgLm1hcChncm91cCA9PlxyXG4gICAgICAgICAgICB0aGlzLmdhbWVMb2JieUxpYlNlcnZpY2UuZ2V0R2FtZXModGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLCB7XHJcbiAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICBzaXplOiB0aGlzLmJyYW5kQ29uZmlnPy5sb2JieUdhbWVzUGFnZVNpemUsXHJcbiAgICAgICAgICAgICAgZ2FtZUdyb3VwSWQ6IGdyb3VwLmlkXHJcbiAgICAgICAgICAgIH0sIHsgcmVmZXJlcjogdGhpcy5icmFuZENvbmZpZz8uc2l0ZVVybCB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBnYW1lR3JvdXBEZXRhaWxzOiBncm91cCxcclxuICAgICAgICAgICAgICAgIGdhbWVzOiByZXNcclxuICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHJlcXVlc3RzKTtcclxuICAgICAgfSlcclxuXHJcbiAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXN1bHQ6IExvYmJ5R2FtZXNbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9iYnlHYW1lcyA9IHJlc3VsdDtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxvYmJ5IGdhbWVzOicsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZk5vR2FtZXNUb1Nob3coKSB7XHJcbiAgICBsZXQgbm9HYW1lcyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRHYW1lcyAmJiBBcnJheS5pc0FycmF5KHRoaXMuZmlsdGVyZWRHYW1lcykgJiYgdGhpcy5maWx0ZXJlZEdhbWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBub0dhbWVzID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMubm9HYW1lc1RvU2hvdyA9IG5vR2FtZXM7XHJcbiAgfVxyXG5cclxuICBnZXRnYW1lQ2xpY2tlZChnYW1lQ29kZTogYW55KTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2FtZUNsaWNrZWQuZW1pdChnYW1lQ29kZSk7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImxvYmJ5X21haW4tbG9iYnlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2JieV9nYW1lLWZpbHRlci1iYWNrZ3JvdW5kXCIgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZCc6IHRoZW1lPy5iYWNrZ3JvdW5kIHx8ICdub25lJyB9XCI+XHJcbiAgICAgICAgPCEtLSBNYWluIEZpbHRlciBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2JieV9maXhlZC1mb290ZXItd2lkdGggbG9iYnlfY2xlYXJmaXhcIiBbbmdTdHlsZV09XCJ7ICdib3JkZXItYm90dG9tJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnbm9uZScgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheS1maWx0ZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5X3NlYXJjaEJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2JieV9nYW1lLXNlYXJjaFwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJsb2JieV9mb3JtLWlubGluZVwiIChzdWJtaXQpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBjbGFzcz1cImxvYmJ5X2dhbWUtc2VhcmNoLWZvcm1cIiBpZD1cInNlYXJjaElucHV0XCIgbmFtZT1cImdhbWVTZWFyY2hcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiR0FNRSBTRUFSQ0hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2hcIiAoaW5wdXQpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBQcm92aWRlciBTd2lwZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5X3N3aXBlckNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3dpcGVyLWNvbnRhaW5lciAjc3dpcGVyQ29udGFpbmVyICpuZ0lmPVwicHJvdmlkZXJMaXN0ICYmIHByb3ZpZGVyTGlzdC5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzLXBlci12aWV3PVwiMVwiIHNwYWNlLWJldHdlZW49XCI2XCIgc3BlZWQ9XCI1MFwiIFtsb29wXT1cInNob3VsZExvb3BQcm92aWRlcnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uPVwiZmFsc2VcIiBjc3MtbW9kZT1cInRydWVcIiBbYnJlYWtwb2ludHNdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCc6IHsgc2xpZGVzUGVyVmlldzogMyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzIwMCc6IHsgc2xpZGVzUGVyVmlldzogNCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzMyMCc6IHsgc2xpZGVzUGVyVmlldzogNCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzQ4MCc6IHsgc2xpZGVzUGVyVmlldzogNiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzc2OCc6IHsgc2xpZGVzUGVyVmlldzogOCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MSc6IHsgc2xpZGVzUGVyVmlldzogMTAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjgwJzogeyBzbGlkZXNQZXJWaWV3OiAxMiB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzd2lwZXItc2xpZGUgKm5nRm9yPVwibGV0IHByb3ZpZGVyIG9mIHByb3ZpZGVyTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2JieV9wcm92aWRlci1zbGlkZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJicmFuZENvbmZpZz8ucHJvdmlkZXJzSWNvbnNEaXIgKyAnLycgKyBwcm92aWRlci52ZW5kb3JDb2RlICsgJy5zdmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwicHJvdmlkZXIubmFtZVwiIChjbGljayk9XCJmaWx0ZXJQcm92aWRlckdhbWVzKDAsIHByb3ZpZGVyLnZlbmRvckNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N3aXBlci1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmF2aWdhdGlvbiBidXR0b25zIC0gT1VUU0lERSAuc3dpcGVyQ29udGFpbmVyIGJ1dCBJTlNJREUgLnNlYXJjaEJhciAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLW5hdmlnYXRpb24tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzd2lwZXItYnV0dG9uLXByZXZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnLS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcic6IHRoZW1lPy5idXR0b25CYWNrZ3JvdW5kQ29sb3IgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgcHJvdmlkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tYXJyb3ctbGVmdC1nYW1lc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3dpcGVyLWJ1dHRvbi1uZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJy0tc3dpcGVyLW5hdmlnYXRpb24tY29sb3InOiB0aGVtZT8uYnV0dG9uQmFja2dyb3VuZENvbG9yIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgcHJvdmlkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tYXJyb3ctcmlnaHQtZ2FtZXNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLXByb3ZpZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJmLXRhYnMgcHJvdmlkZXJJY29ucy11bC1kZXNrdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwiZmF2b3VyaXRlSWNvblwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnRcIiAoY2xpY2spPVwiZmlsdGVyRmF2b3VyaXRlR2FtZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVjZW50R2FtZXN0dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IC00MnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHRpcCB0dGlwLWFycm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZSBHYW1lc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy1kb3duXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTU2cHhcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheS1maWx0ZXItY29udGVudCBidHRcIiBpZD1cInJlY2VudEdhbWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhlYXJ0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlY2VudCBHYW1lcyBJY29uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD1cInJlY2VudEdhbWVzSWNvblwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnRcIiAoY2xpY2spPVwiZmlsdGVyTGFzdFBsYXllZEdhbWVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlY2VudEdhbWVzdHRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi1sZWZ0OiAtNDJweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR0aXAgdHRpcC1hcnJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFzdCBwbGF5ZWQgR2FtZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctZG93blwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01NnB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnQgYnR0XCIgaWQ9XCJyZWNlbnRHYW1lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9ja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIb3QgR2FtZXMgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJob3RHYW1lc0ljb25cIiBbbmdTdHlsZV09XCJ7ICdib3JkZXInOiB0aGVtZT8uYm9yZGVyU2VhcmNoIHx8ICdub25lJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWZpbHRlci1jb250ZW50XCIgKGNsaWNrKT1cImZpbHRlckhvdEdhbWVzKDAsICdob3QnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiaG90R2FtZXN0dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IC0yM3B4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHRpcCB0dGlwLWFycm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3QgR2FtZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctZG93blwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0zNXB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnQgYnR0XCIgaWQ9XCJob3RHYW1lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maXJlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEdhbWUgQ2F0ZWdvcnkgRHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwiZ2FtZUNhdGVnb3J5XCIgW25nU3R5bGVdPVwieyAnYm9yZGVyJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnbm9uZScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ2FtZS1jYXRlZ29yeS1saW5rIGdhbWUtY2F0ZWdvcnktbGluay1kZXNrdG9wIGhpZGRlbi14cyBoaWRkZW4tc20gZGlzcGxheS1maWx0ZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYXRlZ29yeS1idG5cIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ3RyYW5zcGFyZW50J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cInRvZ2dsZUdhbWVDYXRlZ29yeVRvcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeUxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2FtZUNhdGVnb3J5TGlua1wiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29uLWFuZ2xlLWRvd24nOiAhY2F0ZWdvcnlDaG9zZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNvbi1jbG9zZSc6IGNhdGVnb3J5Q2hvc2VuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B1bGwtcmlnaHQnOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBhcmlhLWxhYmVsPVwiVG9nZ2xlIGNhdGVnb3J5IG1lbnVcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ3RyYW5zcGFyZW50J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cImNhdGVnb3J5Q2hvc2VuID8gRHJvcGRvd25DbG9zZSgpIDogdG9nZ2xlR2FtZUNhdGVnb3J5VG9wKClcIj48L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEdhbWUgQ2F0ZWdvcnkgRHJvcGRvd24gTWVudSAocG9zaXRpb25lZCBkaXJlY3RseSBiZWxvdykgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJnYW1lQ2F0ZWdvcnlUb3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhcmZpeCBnYW1lLWNhdGVnb3J5LWxpc3QgZ2FtZS1jYXRlZ29yeS1saXN0LWZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJzaG93R2FtZUNhdGVnb3J5VG9wID8gJ2Jsb2NrJyA6ICdub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbWUtY2F0ZWdvcnktbGlzdC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImdhbWUtY2F0ZWdvcnktbGlzdC1pdGVtXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyNmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhlbWU/LmJhY2tncm91bmQgfHwgJyMyNjI2MjYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXInOiB0aGVtZT8uYm9yZGVyIHx8ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJnYW1lLWNhdGVnb3J5LWxpc3QtaXRlbS1saVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBsb2JieUdhbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tncm91cC5nYW1lR3JvdXBEZXRhaWxzLmlkfX0tTGVmdFNpZGVCdXR0b24tZm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXRlZ29yeUxhYmVsID0gZ3JvdXAuZ2FtZUdyb3VwRGV0YWlscy5uYW1lOyBmaWx0ZXJHcm91cEdhbWVzKDAsIGdyb3VwLmdhbWVHcm91cERldGFpbHMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5nYW1lR3JvdXBEZXRhaWxzLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gIEdhbWVzIFNlY3Rpb24gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2FtZXMtYmFja2dyb3VuZFwiIGlkPVwiZ2FtZXNMb2JieVwiICpuZ0lmPVwiIWZpbHRlckFjdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGxvYmJ5R2FtZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImdhbWVzLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1nYW1lLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIFtuZ1N0eWxlXT1cInsgJ2NvbG9yJzogdGhlbWU/LnRleHRDb2xvciB8fCAnI0ZGRkZGRicgfVwiPnt7Z3JvdXAuZ2FtZUdyb3VwRGV0YWlscy5uYW1lfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0bi1uZXdnYW1lc3RyaXBcIiBbbmdTdHlsZV09XCJ7ICdib3JkZXInOiAodGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnbm9uZScpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGhvdmVyZWRWaWV3QWxsSW5kZXggPT09IGkgPyAodGhlbWU/LmJ1dHRvbkJhY2tncm91bmRDb2xvciB8fCAnJykgOiAodGhlbWU/LmJhY2tncm91bmQgfHwgJyMyNjI2MjYnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwidmlld0dhbWVDYXRlZ29yeShncm91cC5nYW1lR3JvdXBEZXRhaWxzKVwiIChtb3VzZWVudGVyKT1cImhvdmVyZWRWaWV3QWxsSW5kZXggPSBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZFZpZXdBbGxJbmRleCA9IG51bGxcIj5WSUVXIEFMTDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0bi1BcnJvdy1sZWZ0XCIgW25nQ2xhc3NdPVwieyAncHVsc2UnOiBwdWxzaW5nQnV0dG9uID09PSAncHJldicgKyBpIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdib3JkZXInOiBob3ZlcmVkQnV0dG9uID09PSAncHJldicgKyBpID8gKHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnKTonMXB4IHNvbGlkICNmZmYnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXMgZ2FtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidHJpZ2dlclB1bHNlKCdwcmV2JyArIGkpOyBzbGlkZVByZXYoaSlcIiAobW91c2VlbnRlcik9XCJob3ZlcmVkQnV0dG9uID0gJ3ByZXYnICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRCdXR0b24gPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctaWNvbiBhcnJvdy1sZWZ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0bi1BcnJvdy1yaWdodFwiIFtuZ0NsYXNzXT1cInsgJ3B1bHNlJzogcHVsc2luZ0J1dHRvbiA9PT0gJ25leHQnICsgaSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYm9yZGVyJzogaG92ZXJlZEJ1dHRvbiA9PT0gJ25leHQnICsgaSA/ICh0aGVtZT8uYm9yZGVyU2VhcmNoIHx8ICdub25lJykgOiAnMXB4IHNvbGlkICNmZmYnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBhcmlhLWxhYmVsPVwiTmV4dCBnYW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyUHVsc2UoJ25leHQnICsgaSk7IHNsaWRlTmV4dChpKVwiIChtb3VzZWVudGVyKT1cImhvdmVyZWRCdXR0b24gPSAnbmV4dCcgKyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZEJ1dHRvbiA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy1pY29uIGFycm93LXJpZ2h0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgd2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN3aXBlci1jb250YWluZXIgI2dhbWVTd2lwZXJDb250YWluZXIgKm5nSWY9XCJncm91cC5nYW1lcyAmJiBncm91cC5nYW1lcy5sZW5ndGhcIiBzbGlkZXMtcGVyLXZpZXc9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UtYmV0d2Vlbj1cIjEwXCIgc3BlZWQ9XCI1MFwiIFtsb29wXT1cInNob3VsZExvb3BHYW1lc0Zvckdyb3VwKGdyb3VwLmdhbWVzKVwiIG5hdmlnYXRpb249XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzcy1tb2RlPVwiZmFsc2VcIiBbYnJlYWtwb2ludHNdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzE5MCc6IHsgc2xpZGVzUGVyVmlldzogMSwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM1MCc6IHsgc2xpZGVzUGVyVmlldzogMiwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzUyMCc6IHsgc2xpZGVzUGVyVmlldzogMywgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzY3Nic6IHsgc2xpZGVzUGVyVmlldzogNCwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzgzNCc6IHsgc2xpZGVzUGVyVmlldzogNCwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5OCc6IHsgc2xpZGVzUGVyVmlldzogNSwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzExNTgnOiB7IHNsaWRlc1BlclZpZXc6IDYsIHNwYWNlQmV0d2VlbjogMTAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjgwJzogeyBzbGlkZXNQZXJWaWV3OiA2LCBzcGFjZUJldHdlZW46IDEwIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3dpcGVyLXNsaWRlICpuZ0Zvcj1cImxldCBnYW1lIG9mIGdyb3VwLmdhbWVzOyBsZXQgZ2FtZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1nYW1lLWlkXT1cImkgKyAnLScgKyBnYW1lLmdhbWVDb2RlXCIgY2xhc3M9XCJsb2JieV9nYW1lcy1ob21lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FtZS1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbWUtY2FyZF9fY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRHYW1lS2V5ID0gZ2FtZUluZGV4ICsgJy0nICsgIGdhbWUuZ2FtZUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkR2FtZUtleSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbWUtY2FyZF9fYWN0aW9uLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhvdmVyZWRHYW1lS2V5ID09PSBnYW1lSW5kZXggKyAnLScgKyBnYW1lLmdhbWVDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBnYW1lLWNhcmRfX2FjdGlvbi1idG4tLXBsYXlcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy5idXR0b25CYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZjdkMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Z2FtZUNsaWNrZWQoZ2FtZS5nYW1lQ29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbGF5XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpYmJvblwiPjxzcGFuIFtuZ0NsYXNzXT1cImdhbWUudGFnTGlzdC5pbmNsdWRlcygnbmV3JykgPyAnbmV3JyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1lLnRhZ0xpc3QuaW5jbHVkZXMoXCJuZXdcIikgPyBcIk5FV1wiIDogXCJcIiB9fTwvc3Bhbj48c3BhbiBbbmdDbGFzc109XCJnYW1lLnRhZ0xpc3QuaW5jbHVkZXMoJ2hvdCcpID8gJ2hvdCcgOiAnJ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtZS50YWdMaXN0LmluY2x1ZGVzKFwiaG90XCIpID8gXCJIT1RcIiA6IFwiXCIgfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX2ltZyBnYW1lLWNhcmRfX2ltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1ncmFkaWVudFwiIFtzcmNdPVwiZ2V0R2FtZUltYWdlKGdhbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudClcIiBbYWx0XT1cImdhbWUubmFtZVwiIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2FtZS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX3RleHRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhlbWU/LmdhbWV0ZXh0YmFja2dyb3VuZCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjxzcGFuIGNsYXNzPVwiZ2FtZS1jYXJkX19mYXZpY29uXCI+PGkgY2xhc3M9XCJmYXIgZmEtaGVhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L3NwYW4+PHNwYW4gY2xhc3M9XCJnYW1lLWNhcmQtLW5hbWVcIj57eyBnYW1lLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gRmlsdGVyZWQgR2FtZXMgU2VjdGlvbnMtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJnYW1lcy1iYWNrZ3JvdW5kXCIgaWQ9XCJmaWx0ZXJlZC1nYW1lcy1zZWN0aW9uXCIgKm5nSWY9XCJmaWx0ZXJBY3RpdmVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9iYnlfZ2FtZXMtcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRcIiBbYXR0ci5kYXRhLWdhbWUtaWRdPVwiZ2FtZUluZGV4ICsgJy0nICsgZ2FtZS5nYW1lQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ2FtZSBvZiBmaWx0ZXJlZEdhbWVzOyBsZXQgZ2FtZUluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX2NvbnRlbnRcIiAobW91c2VlbnRlcik9XCJob3ZlcmVkR2FtZUtleSA9IGdhbWVJbmRleCArICctJyArICBnYW1lLmdhbWVDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkR2FtZUtleSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FtZS1jYXJkX19hY3Rpb24tYnRuXCIgKm5nSWY9XCJob3ZlcmVkR2FtZUtleSA9PT0gZ2FtZUluZGV4ICsgJy0nICsgZ2FtZS5nYW1lQ29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBnYW1lLWNhcmRfX2FjdGlvbi1idG4tLXBsYXlcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy5idXR0b25CYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZjdkMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cImdldGdhbWVDbGlja2VkKGdhbWUuZ2FtZUNvZGUpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsYXlcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmliYm9uXCI+PHNwYW4gW25nQ2xhc3NdPVwiZ2FtZS50YWdMaXN0LmluY2x1ZGVzKCduZXcnKSA/ICduZXcnIDogJydcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbWUudGFnTGlzdC5pbmNsdWRlcyhcIm5ld1wiKSA/IFwiTkVXXCIgOiBcIlwiIH19PC9zcGFuPjxzcGFuIFtuZ0NsYXNzXT1cImdhbWUudGFnTGlzdC5pbmNsdWRlcygnaG90JykgPyAnaG90JyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1lLnRhZ0xpc3QuaW5jbHVkZXMoXCJob3RcIikgPyBcIkhPVFwiIDogXCJcIiB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FtZS1jYXJkX19pbWcgZ2FtZS1jYXJkX19pbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1ncmFkaWVudFwiIFtzcmNdPVwiZ2V0R2FtZUltYWdlKGdhbWUpXCIgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiZ2FtZS5uYW1lXCIgbG9hZGluZz1cImxhenlcIiBbdGl0bGVdPVwiZ2FtZS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX3RleHRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhlbWU/LmdhbWV0ZXh0YmFja2dyb3VuZCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjxzcGFuIGNsYXNzPVwiZ2FtZS1jYXJkX19mYXZpY29uXCI+PGkgY2xhc3M9XCJmYXIgZmEtaGVhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvc3Bhbj48c3BhbiBjbGFzcz1cImdhbWUtY2FyZC0tbmFtZVwiPnt7IGdhbWUubmFtZSB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5X2xvYWRNb3JlQnRuXCIgKm5nSWY9XCJmaWx0ZXJTaG93TG9hZE1vcmVcIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gbG9hZC1tb3JlLWJ0blwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRNb3JlRmlsdGVyZWRHYW1lcygpXCI+XHJcbiAgICAgICAgICAgICAgICBMT0FEIE1PUkVcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2FtZXMtYmFja2dyb3VuZCBsb2JieV9ub0dhbWVzTWVzc2FnZVwiIGlkPVwibm9HYW1lc01lc3NhZ2VcIiAqbmdJZj1cIm5vR2FtZXNUb1Nob3dcIj5cclxuICAgICAgICA8cD5OTyBHQU1FUyBGT1VORDwvcD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
421
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzaW5vLWxvYmJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbWUtbG9iYnktbGliL3NyYy9saWIvY2FzaW5vLWxvYmJ5L2Nhc2luby1sb2JieS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1lLWxvYmJ5LWxpYi9zcmMvbGliL2Nhc2luby1sb2JieS9jYXNpbm8tbG9iYnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFvQyxzQkFBc0IsRUFBRSxZQUFZLEVBQXlCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekwsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBV3BFLE1BQU0sT0FBTyxvQkFBb0I7SUFpQy9CLFlBQVksWUFBbUMsRUFBVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQWhDakcsbUJBQWMsR0FBa0IsSUFBSSxDQUFDO1FBQ3JDLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUNwQyxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFHM0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRzFDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFOUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBVSxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7UUFDM0Qsa0JBQWEsR0FBa0IsSUFBSSxDQUFD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O2dCQUN6QixXQUFXO3NCQUFwQixNQUFNO2dCQUNFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQXFCb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWUgfSBmcm9tICcuLi90aGVtZS9kZWZhdWx0LXRoZW1lJztcclxuaW1wb3J0IHsgR2FtZUxvYmJ5VGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUvdGhlbWVTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2JieUdhbWVzLCBHYW1lR3JvdXAsIEdhbWVHcm91cHNSZXNwb25zZSwgR2FtZUxvYmJ5IH0gZnJvbSAnLi4vZ2FtZS1sb2JieS1saWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEdhbWVMb2JieUxpYlNlcnZpY2UgfSBmcm9tICcuLi9nYW1lLWxvYmJ5LWxpYi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG1hcCwgb2YsIHN3aXRjaE1hcCwgdGFwLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYXNpbm8tbG9iYnknLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXNpbm8tbG9iYnkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9jYXNpbm8tbG9iYnkuY29tcG9uZW50LnNjc3MnLFxyXG4gIC8vIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIENhc2lub0xvYmJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBob3ZlcmVkU2xpZGVJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgaG92ZXJlZEJ1dHRvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgaG92ZXJlZEdhbWVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBWaWV3Q2hpbGQoJ3N3aXBlckNvbnRhaW5lcicpIHN3aXBlckNvbnRhaW5lcjogYW55O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2dhbWVTd2lwZXJDb250YWluZXInKSBnYW1lU3dpcGVyQ29udGFpbmVycyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuICBAT3V0cHV0KCkgZ2FtZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBASW5wdXQoKSBjYXNpbm9EYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgdGhlbWU/OiBHYW1lTG9iYnlUaGVtZTtcclxuICBASW5wdXQoKSBiYXNlVXJsOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBicmFuZENvbmZpZzogYW55O1xyXG4gIHdlYnNpdGVDb2RlOiBzdHJpbmcgPSAnJztcclxuICBwcm92aWRlckxpc3Q6IGFueVtdID0gW107IC8vIEZJWDogSW5pdGlhbGl6ZSBhcyBlbXB0eSBhcnJheVxyXG4gIHB1bHNpbmdCdXR0b246IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIHNob3dHYW1lQ2F0ZWdvcnlUb3AgPSBmYWxzZTtcclxuICBjYXRlZ29yeUNob3NlbiA9IGZhbHNlO1xyXG4gIGNhdGVnb3J5TGFiZWw6IHN0cmluZyA9ICdDQVRFR09SWSc7XHJcbiAgc29ydGVkR2FtZUdyb3VwTGlzdDogYW55W10gPSBbXTsgLy8gRklYOiBJbml0aWFsaXplIGFzIGVtcHR5IGFycmF5IGluc3RlYWQgb2YgdW5kZWZpbmVkXHJcbiAgaG92ZXJlZFZpZXdBbGxJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qIGdhbWVzIGxvZ2ljICovXHJcbiAgbG9iYnlHYW1lczogTG9iYnlHYW1lc1tdID0gW107XHJcbiAgc29ydGVkR2FtZUdyb3VwOiBHYW1lR3JvdXBbXSA9IFtdO1xyXG4gIGZpbHRlcmVkR2FtZXM6IGFueSB8IG51bGwgPSBudWxsO1xyXG4gIGZpbHRlclNob3dMb2FkTW9yZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGN1cnJlbnRGaWx0ZXJQYWdlOiBudW1iZXIgPSAwO1xyXG4gIG5vR2FtZXNUb1Nob3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmaWx0ZXJBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBjdXJyZW50U2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgY3VycmVudFNlYXJjaFBhcmFtczogYW55ID0ge307XHJcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcih0aGVtZVNlcnZpY2U6IEdhbWVMb2JieVRoZW1lU2VydmljZSwgcHJpdmF0ZSBnYW1lTG9iYnlMaWJTZXJ2aWNlOiBHYW1lTG9iYnlMaWJTZXJ2aWNlKSB7XHJcbiAgICB0aGVtZVNlcnZpY2UudGhlbWUkLnN1YnNjcmliZSh0ID0+ICh0aGlzLnRoZW1lID0gdCkpO1xyXG4gIH1cclxuXHJcbiAgc2xpZGVOZXh0KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHN3aXBlckVsID0gdGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHN3aXBlckVsPy5zd2lwZXIpIHtcclxuICAgICAgc3dpcGVyRWwuc3dpcGVyLnNsaWRlTmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2xpZGVQcmV2KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHN3aXBlckVsID0gdGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycy50b0FycmF5KClbaW5kZXhdPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgaWYgKHN3aXBlckVsPy5zd2lwZXIpIHtcclxuICAgICAgc3dpcGVyRWwuc3dpcGVyLnNsaWRlUHJldigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEdhbWVzUHJvdmlkZXJzKCk7IC8vIEZldGNoIHByb3ZpZGVycyBsaXN0XHJcbiAgICB0aGlzLmxvYWRMb2JieUdhbWVzKGZhbHNlKTsgLy8gTG9hZCBnYW1lcyBmb3Igbm9uLWxvZ2dlZCBpbiB1c2VycyBieSBkZWZhdWx0XHJcbiAgICB0aGlzLnNlYXJjaFN1YmplY3RcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLCAvLyB3YWl0IDIwMDBtcyBhZnRlciB0eXBpbmcgc3RvcHNcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCAvLyAgaWdub3JlIHNhbWUgdGV4dFxyXG4gICAgICAgIHN3aXRjaE1hcCgoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJQYWdlID0gMDsgLy8gcmVzZXQgcGFnZVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgIHNpemU6IHRoaXMuYnJhbmRDb25maWcubG9hZE1vcmVQYWdlU2l6ZSxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VJZDogdGhpcy5icmFuZENvbmZpZz8ubGFuZ0NvZGUsXHJcbiAgICAgICAgICAgIHNlYXJjaFRleHQ6IHNlYXJjaFRleHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5nYW1lTG9iYnlMaWJTZXJ2aWNlLmdldEdhbWVzKFxyXG4gICAgICAgICAgICB0aGlzLmJyYW5kQ29uZmlnPy5hcGlVcmwsXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFBhcmFtcyxcclxuICAgICAgICAgICAgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChnYW1lczogYW55W10pID0+IHtcclxuICAgICAgICBpZiAoIWdhbWVzKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyU2hvd0xvYWRNb3JlID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSBnYW1lcztcclxuICAgICAgICB0aGlzLmZpbHRlclNob3dMb2FkTW9yZSA9XHJcbiAgICAgICAgICBnYW1lcy5sZW5ndGggPT09IHRoaXMuYnJhbmRDb25maWcubG9hZE1vcmVQYWdlU2l6ZTtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VhcmNoVGV4dC50cmltKCkgIT09ICcnICYmIHRoaXMuY3VycmVudFNlYXJjaFRleHQgIT09IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVGaWx0ZXIoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRmlsdGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplUHJvdmlkZXJTd2lwZXIoKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplR2FtZVN3aXBlcnMoKTtcclxuICAgIH0sIDIwMDApO1xyXG4gICAgdGhpcy50cmlnZ2VyUHVsc2UoJycpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZSA/PyAnJztcclxuICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHZhbHVlLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVQcm92aWRlclN3aXBlcigpIHtcclxuICAgIGlmICh0aGlzLnN3aXBlckNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBjb25zdCBwcm92aWRlclN3aXBlckVsID0gdGhpcy5zd2lwZXJDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgcGFyZW50Q29udGFpbmVyID0gcHJvdmlkZXJTd2lwZXJFbC5jbG9zZXN0KCcubG9iYnlfc2VhcmNoQmFyJykgfHwgcHJvdmlkZXJTd2lwZXJFbC5jbG9zZXN0KCcuZml4ZWQtZm9vdGVyLXdpZHRoJyk7XHJcbiAgICAgIGNvbnN0IHByZXZCdXR0b24gPSBwYXJlbnRDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItYnV0dG9uLXByZXYnKTtcclxuICAgICAgY29uc3QgbmV4dEJ1dHRvbiA9IHBhcmVudENvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcignLnN3aXBlci1idXR0b24tbmV4dCcpO1xyXG5cclxuICAgICAgaWYgKHByZXZCdXR0b24gJiYgbmV4dEJ1dHRvbikge1xyXG4gICAgICAgIHByZXZCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICBwcm92aWRlclN3aXBlckVsLnN3aXBlcj8uc2xpZGVQcmV2KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbmV4dEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgIHByb3ZpZGVyU3dpcGVyRWwuc3dpcGVyPy5zbGlkZU5leHQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplR2FtZVN3aXBlcnMoKSB7XHJcbiAgICBpZiAodGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycyAmJiB0aGlzLmdhbWVTd2lwZXJDb250YWluZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5nYW1lU3dpcGVyQ29udGFpbmVycy5mb3JFYWNoKChzd2lwZXJSZWYsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ2FtZVN3aXBlckVsID0gc3dpcGVyUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIC8vIEZpbmQgdGhlIHBhcmVudCBnYW1lcy1zZWN0aW9uIGZvciB0aGlzIHNwZWNpZmljIHN3aXBlclxyXG4gICAgICAgIGNvbnN0IGdhbWVzU2VjdGlvbiA9IGdhbWVTd2lwZXJFbC5jbG9zZXN0KCcuZ2FtZXMtc2VjdGlvbicpO1xyXG5cclxuICAgICAgICBpZiAoZ2FtZXNTZWN0aW9uKSB7XHJcbiAgICAgICAgICBjb25zdCBjdXN0b21QcmV2ID0gZ2FtZXNTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoJy5idG4tQXJyb3ctbGVmdCcpO1xyXG4gICAgICAgICAgY29uc3QgY3VzdG9tTmV4dCA9IGdhbWVzU2VjdGlvbi5xdWVyeVNlbGVjdG9yKCcuYnRuLUFycm93LXJpZ2h0Jyk7XHJcblxyXG4gICAgICAgICAgaWYgKGN1c3RvbVByZXYpIHtcclxuICAgICAgICAgICAgY3VzdG9tUHJldi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgR2FtZSBzZWN0aW9uICR7aW5kZXh9IC0gUHJldmlvdXMgY2xpY2tlZGApO1xyXG4gICAgICAgICAgICAgIGdhbWVTd2lwZXJFbC5zd2lwZXI/LnNsaWRlUHJldigpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjdXN0b21OZXh0KSB7XHJcbiAgICAgICAgICAgIGN1c3RvbU5leHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYEdhbWUgc2VjdGlvbiAke2luZGV4fSAtIE5leHQgY2xpY2tlZGApO1xyXG4gICAgICAgICAgICAgIGdhbWVTd2lwZXJFbC5zd2lwZXI/LnNsaWRlTmV4dCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRklYOiBVcGRhdGVkIGxvb3AgbG9naWMgdG8gcHJldmVudCBTd2lwZXIgbG9vcCB3YXJuaW5nc1xyXG4gIC8vIE9ubHkgZW5hYmxlIGxvb3Agd2hlbiB3ZSBoYXZlIG1vcmUgc2xpZGVzIHRoYW4gdGhlIG1heGltdW0gc2xpZGVzUGVyVmlld1xyXG4gIHNob3VsZExvb3BQcm92aWRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMucHJvdmlkZXJMaXN0IHx8ICFBcnJheS5pc0FycmF5KHRoaXMucHJvdmlkZXJMaXN0KSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF4IHNsaWRlc1BlclZpZXcgaXMgMTIgYXQgdGhlIDEyODBweCBicmVha3BvaW50XHJcbiAgICAvLyBPbmx5IGVuYWJsZSBsb29wIGlmIHdlIGhhdmUgbW9yZSBwcm92aWRlcnMgdGhhbiB3aGF0J3MgdmlzaWJsZVxyXG4gICAgY29uc3QgbWF4U2xpZGVzUGVyVmlldyA9IDEyO1xyXG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXJMaXN0Lmxlbmd0aCA+IG1heFNsaWRlc1BlclZpZXc7XHJcbiAgfVxyXG5cclxuICBzaG91bGRMb29wR2FtZXMoZ2FtZXM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWdhbWVzIHx8ICFBcnJheS5pc0FycmF5KGdhbWVzKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF4IHNsaWRlc1BlclZpZXcgaXMgOCBhdCB0aGUgMTI4MHB4IGJyZWFrcG9pbnRcclxuICAgIC8vIE9ubHkgZW5hYmxlIGxvb3AgaWYgd2UgaGF2ZSBtb3JlIGdhbWVzIHRoYW4gd2hhdCdzIHZpc2libGVcclxuICAgIGNvbnN0IG1heFNsaWRlc1BlclZpZXcgPSA4O1xyXG4gICAgcmV0dXJuIGdhbWVzLmxlbmd0aCA+IG1heFNsaWRlc1BlclZpZXc7XHJcbiAgfVxyXG5cclxuICAvLyBORVc6IFBlci1ncm91cCBsb29wIGxvZ2ljIGZvciBnYW1lIHN3aXBlcnNcclxuICAvLyBUaGlzIGNoZWNrcyBlYWNoIGdhbWUgZ3JvdXAgaW5kaXZpZHVhbGx5IHRvIGRldGVybWluZSBpZiBsb29wIHNob3VsZCBiZSBlbmFibGVkXHJcbiAgc2hvdWxkTG9vcEdhbWVzRm9yR3JvdXAoZ2FtZXM6IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWdhbWVzIHx8ICFBcnJheS5pc0FycmF5KGdhbWVzKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWF4IHNsaWRlc1BlclZpZXcgaXMgOCBhdCB0aGUgMTI4MHB4IGJyZWFrcG9pbnRcclxuICAgIC8vIE9ubHkgZW5hYmxlIGxvb3AgaWYgdGhpcyBzcGVjaWZpYyBncm91cCBoYXMgbW9yZSBnYW1lcyB0aGFuIHdoYXQncyB2aXNpYmxlXHJcbiAgICBjb25zdCBtYXhTbGlkZXNQZXJWaWV3ID0gODtcclxuICAgIHJldHVybiBnYW1lcy5sZW5ndGggPiBtYXhTbGlkZXNQZXJWaWV3O1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlclB1bHNlKGJ1dHRvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnB1bHNpbmdCdXR0b24gPSBidXR0b247XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5wdWxzaW5nQnV0dG9uID0gbnVsbDtcclxuICAgIH0sIDQwMCk7IC8vIER1cmF0aW9uIHNob3VsZCBtYXRjaCB0aGUgYW5pbWF0aW9uXHJcbiAgfVxyXG5cclxuICB0b2dnbGVHYW1lQ2F0ZWdvcnlUb3AoKSB7XHJcbiAgICB0aGlzLnNob3dHYW1lQ2F0ZWdvcnlUb3AgPSAhdGhpcy5zaG93R2FtZUNhdGVnb3J5VG9wO1xyXG4gICAgdGhpcy5jYXRlZ29yeUNob3NlbiA9IHRoaXMuY2F0ZWdvcnlMYWJlbCAhPT0gJ0NBVEVHT1JZJztcclxuICAgIGlmICh0aGlzLmNhdGVnb3J5TGFiZWwgPT0gJ0NBVEVHT1JZJykge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGVGaWx0ZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZpZXdHYW1lQ2F0ZWdvcnkoZ3JvdXA6IGFueSkge1xyXG4gICAgdGhpcy5jYXRlZ29yeUxhYmVsID0gZ3JvdXAubmFtZTtcclxuICAgIHRoaXMuc2hvd0dhbWVDYXRlZ29yeVRvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWx0ZXJHcm91cEdhbWVzKDAsIGdyb3VwLmlkKTtcclxuICB9XHJcblxyXG4gIERyb3Bkb3duQ2xvc2UoKSB7XHJcbiAgICB0aGlzLmNhdGVnb3J5TGFiZWwgPT09ICdDQVRFR09SWScgPyB0aGlzLmNhdGVnb3J5Q2hvc2VuID0gZmFsc2UgOiB0aGlzLmNhdGVnb3J5Q2hvc2VuID0gdHJ1ZTtcclxuICAgIHRoaXMuY2F0ZWdvcnlDaG9zZW4gPyB0aGlzLmNhdGVnb3J5TGFiZWwgPSAnQ0FURUdPUlknIDogdGhpcy5jYXRlZ29yeUxhYmVsO1xyXG4gICAgIXRoaXMuY2F0ZWdvcnlDaG9zZW4gPyB0aGlzLmNhdGVnb3J5Q2hvc2VuID0gdHJ1ZSA6IHRoaXMuY2F0ZWdvcnlDaG9zZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0dhbWVDYXRlZ29yeVRvcCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY2F0ZWdvcnlMYWJlbCA9PSAnQ0FURUdPUlknKSB7XHJcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZUZpbHRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgXHJcblxyXG4gIGdldEdhbWVJbWFnZShnYW1lOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFnYW1lPy5nYW1lQ29kZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5icmFuZENvbmZpZy5kZWZhdWx0R2FtZUltYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgJHt0aGlzLmJyYW5kQ29uZmlnPy5nYW1lc0ltYWdlc0Rpcn0vJHtnYW1lLmdhbWVDb2RlfS8ke2dhbWUuZ2FtZUNvZGV9LndlYnBgO1xyXG4gIH1cclxuXHJcbiAgb25JbWFnZUVycm9yKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BcclxuICAgIGlmIChpbWcuc3JjLmluY2x1ZGVzKCdkZWZhdWx0LWdhbWUtaW1hZ2UuanBnJykpIHJldHVybjtcclxuICAgIGltZy5zcmMgPSB0aGlzLmJyYW5kQ29uZmlnLmRlZmF1bHRHYW1lSW1hZ2U7XHJcbiAgfVxyXG5cclxuICAvLyBHYW1lcyBmaWx0ZXJzXHJcbiAgZmlsdGVyR3JvdXBHYW1lcyhjdXJyZW50UGFnZTogbnVtYmVyLCBnYW1lR3JvdXBJZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNob3dHYW1lQ2F0ZWdvcnlUb3AgPSBmYWxzZTtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgIHRoaXMuZ2V0RmlsdGVyZWRHYW1lcyhjdXJyZW50UGFnZSwgdGhpcy5icmFuZENvbmZpZy5sb2FkTW9yZVBhZ2VTaXplLCB7IGdhbWVHcm91cElkOiBnYW1lR3JvdXBJZCB9KTtcclxuICAgIHRoaXMuYWN0aXZhdGVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGZpbHRlclByb3ZpZGVyR2FtZXMoY3VycmVudFBhZ2U6IG51bWJlciwgdmVuZG9yaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5jbGVhclNlYXJjaCgpO1xyXG4gICAgdGhpcy5nZXRGaWx0ZXJlZEdhbWVzKGN1cnJlbnRQYWdlLCB0aGlzLmJyYW5kQ29uZmlnLmxvYWRNb3JlUGFnZVNpemUsIHsgdmVuZG9ySWQ6IHZlbmRvcmlkIH0pO1xyXG4gICAgdGhpcy5hY3RpdmF0ZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVySG90R2FtZXMoY3VycmVudFBhZ2U6IG51bWJlciwgdGFnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgIHRoaXMuZ2V0RmlsdGVyZWRHYW1lcyhjdXJyZW50UGFnZSwgdGhpcy5icmFuZENvbmZpZy5sb2FkTW9yZVBhZ2VTaXplLCB7IHRhZzogdGFnIH0pO1xyXG4gICAgdGhpcy5hY3RpdmF0ZUZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyRmF2b3VyaXRlR2FtZXMoKSB7XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XHJcbiAgICB0aGlzLmdldEZhdm91cml0ZUdhbWVzKCk7XHJcbiAgICB0aGlzLmFjdGl2YXRlRmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJMYXN0UGxheWVkR2FtZXMoKSB7XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XHJcbiAgICB0aGlzLmdldExhc3RQbGF5ZWQoKTtcclxuICAgIHRoaXMuYWN0aXZhdGVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIGxvYWRNb3JlRmlsdGVyZWRHYW1lcygpIHtcclxuICAgIHRoaXMuY3VycmVudFNlYXJjaFBhcmFtcy5wYWdlID0gdGhpcy5jdXJyZW50RmlsdGVyUGFnZSArIDE7IC8vIEluY3JlbWVudCBwYWdlIGZvciBuZXh0IGxvYWRcclxuICAgIHRoaXMuZ2V0RmlsdGVyZWRHYW1lcyh0aGlzLmN1cnJlbnRGaWx0ZXJQYWdlLCB0aGlzLmJyYW5kQ29uZmlnLmxvYWRNb3JlUGFnZVNpemUsIHRoaXMuY3VycmVudFNlYXJjaFBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDbGVhcmluZyBzZWFyY2ggaW5wdXQgYW5kIHJlc2V0dGluZyBmaWx0ZXJzJyk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudFNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuY3VycmVudEZpbHRlclBhZ2UgPSAwO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlckFjdGl2ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlRmlsdGVyKCkge1xyXG4gICAgdGhpcy5maWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlcmVkR2FtZXMoXHJcbiAgICBjdXJyZW50UGFnZU51bWJlcjogbnVtYmVyLFxyXG4gICAgcGFnZVNpemU6IG51bWJlcixcclxuICAgIGZpbHRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XHJcbiAgKSB7XHJcbiAgICBjb25zdCBiYXNlUGFyYW1zID0ge1xyXG4gICAgICBwYWdlOiBjdXJyZW50UGFnZU51bWJlciArIDEsXHJcbiAgICAgIHNpemU6IHBhZ2VTaXplLFxyXG4gICAgICBsYW5ndWFnZUlkOiB0aGlzLmJyYW5kQ29uZmlnPy5sYW5nQ29kZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcclxuICAgICAgLi4uYmFzZVBhcmFtcyxcclxuICAgICAgLi4uKGZpbHRlcnMgfHwge30pXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXJyZW50U2VhcmNoUGFyYW1zID0gcXVlcnlQYXJhbXM7IC8vIFN0b3JlIGN1cnJlbnQgc2VhcmNoIHBhcmFtcyBmb3IgbG9hZCBtb3JlIGZ1bmN0aW9uYWxpdHlcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRHYW1lcyhcclxuICAgICAgdGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLFxyXG4gICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH1cclxuICAgICkuc3Vic2NyaWJlKChnYW1lczogYW55W10pID0+IHtcclxuXHJcbiAgICAgIGlmICghZ2FtZXMpIHtcclxuICAgICAgICB0aGlzLmZpbHRlclNob3dMb2FkTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgZmlyc3QgcGFnZSAtIHJlcGxhY2VcclxuICAgICAgaWYgKGN1cnJlbnRQYWdlTnVtYmVyID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEdhbWVzID0gZ2FtZXM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgbmV4dCBwYWdlIC0gYXBwZW5kXHJcbiAgICAgIGVsc2UgaWYgKGN1cnJlbnRQYWdlTnVtYmVyID4gMCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRHYW1lcyA9IFtcclxuICAgICAgICAgIC4uLnRoaXMuZmlsdGVyZWRHYW1lcyxcclxuICAgICAgICAgIC4uLmdhbWVzXHJcbiAgICAgICAgXTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJZiByZXR1cm5lZCBjb3VudCA9PT0gcGFnZVNpemUgLSBtb3JlIGdhbWVzIG1pZ2h0IGV4aXN0XHJcbiAgICAgIHRoaXMuZmlsdGVyU2hvd0xvYWRNb3JlID0gZ2FtZXMubGVuZ3RoID09PSBwYWdlU2l6ZTtcclxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyUGFnZSA9IGN1cnJlbnRQYWdlTnVtYmVyICsgMTsgLy8gVXBkYXRlIGN1cnJlbnQgcGFnZVxyXG4gICAgICBpZiAoIXRoaXMuZmlsdGVyU2hvd0xvYWRNb3JlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyUGFnZSA9IDA7IC8vIFJlc2V0IHRvIGZpcnN0IHBhZ2UgaWYgbm8gbW9yZSBnYW1lc1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgY29uc29sZS5sb2coJ0ZpbHRlcmVkIEdhbWVzOicsIHRoaXMuZmlsdGVyZWRHYW1lcyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdTaG93IExvYWQgTW9yZTonLCB0aGlzLmZpbHRlclNob3dMb2FkTW9yZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBHZXQgR2FtZXNcclxuICBnZXRHYW1lcyhwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRHYW1lcyhcclxuICAgICAgdGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLFxyXG4gICAgICB7IHBhZ2U6IHBhZ2VOdW1iZXIsIHNpemU6IHBhZ2VTaXplLCBsYW5ndWFnZUlkOiB0aGlzLmJyYW5kQ29uZmlnPy5sYW5nQ29kZSB9LFxyXG4gICAgICB7IHJlZmVyZXI6IHRoaXMuYnJhbmRDb25maWc/LnNpdGVVcmwgfVxyXG4gICAgKS5zdWJzY3JpYmUoZ2FtZXMgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnR2FtZXM6JywgZ2FtZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIExhc3QgUGxheWVkXHJcbiAgZ2V0TGFzdFBsYXllZCgpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRHYW1lcyA9IFtdOyAvLyBSZXNldCBiZWZvcmUgbG9hZGluZyBuZXcgb25lc1xyXG4gICAgdGhpcy5nYW1lTG9iYnlMaWJTZXJ2aWNlLmdldExhc3RQbGF5ZWQoXHJcbiAgICAgIHRoaXMuYnJhbmRDb25maWc/LmFwaVVybCxcclxuICAgICAgeyBsYW5ndWFnZUlkOiB0aGlzLmJyYW5kQ29uZmlnPy5sYW5nQ29kZSB9LFxyXG4gICAgICB7IHJlZmVyZXI6IHRoaXMuYnJhbmRDb25maWc/LnNpdGVVcmwgfVxyXG4gICAgKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgaWYgKCFyZXMgfHwgIXJlcy5zdGF0dXMgfHwgcmVzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBsYXN0IHBsYXllZCBnYW1lczonLCByZXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSByZXMuZ2FtZXNMaXN0O1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIEZhdm91cml0ZXNcclxuICBnZXRGYXZvdXJpdGVHYW1lcygpIHtcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRGYXZvdXJpdGVHYW1lcyhcclxuICAgICAgdGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLFxyXG4gICAgICB7IGxhbmd1YWdlSWQ6IHRoaXMuYnJhbmRDb25maWc/LmxhbmdDb2RlIH0sXHJcbiAgICAgIHsgcmVmZXJlcjogdGhpcy5icmFuZENvbmZpZz8uc2l0ZVVybCB9XHJcbiAgICApLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAoIXJlcyB8fCAhcmVzLnN0YXR1cyB8fCByZXMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgIT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGZhdm91cml0ZSBnYW1lczonLCByZXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkR2FtZXMgPSByZXMuZ2FtZXNMaXN0O1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZk5vR2FtZXNUb1Nob3coKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vIFByb3ZpZGVyc1xyXG4gIGdldEdhbWVzUHJvdmlkZXJzKCkge1xyXG4gICAgdGhpcy5nYW1lTG9iYnlMaWJTZXJ2aWNlLmdldEdhbWVzUHJvdmlkZXJzKFxyXG4gICAgICB0aGlzLmJyYW5kQ29uZmlnPy5hcGlVcmwsXHJcbiAgICAgIHsgbGFuZ3VhZ2VJZDogdGhpcy5icmFuZENvbmZpZz8ubGFuZ0NvZGUgfSxcclxuICAgICAgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH1cclxuICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdQcm92aWRlcnM6JywgcmVzPy5nYW1lUHJvdmlkZXJzTGlzdC5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnByb3ZpZGVyTGlzdCA9IHJlcz8uZ2FtZVByb3ZpZGVyc0xpc3QgfHwgW107XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRMb2JieUdhbWVzKGlzTG9nZ2VkSW46IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdMb2FkaW5nIGxvYmJ5IGdhbWVzIGZvcicsIGlzTG9nZ2VkSW4gPyAnbG9nZ2VkIGluIHVzZXInIDogJ2d1ZXN0IHVzZXInKTtcclxuICAgIHRoaXMuZ2FtZUxvYmJ5TGliU2VydmljZS5nZXRHYW1lc0dyb3Vwcyh0aGlzLmJyYW5kQ29uZmlnPy5hcGlVcmwsIHsgbGFuZ3VhZ2VJZDogdGhpcy5icmFuZENvbmZpZz8ubGFuZ0NvZGUgfSwgeyByZWZlcmVyOiB0aGlzLmJyYW5kQ29uZmlnPy5zaXRlVXJsIH0pLnBpcGUoXHJcbiAgICAgIC8qIFN0ZXAgMTogU2VsZWN0IGNvcnJlY3QgbG9iYnkgc2FmZWx5ICovXHJcbiAgICAgIG1hcCgobG9iYmllczogR2FtZUdyb3Vwc1Jlc3BvbnNlKSA9PiB7XHJcblxyXG4gICAgICAgIGlmICghbG9iYmllcyB8fCAhbG9iYmllcy5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTG9iYnk6IEdhbWVMb2JieSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgLy8gSWYgb25seSBvbmUgbG9iYnkgcmV0dXJuZWQgdXNlIGl0XHJcbiAgICAgICAgaWYgKGxvYmJpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBzZWxlY3RlZExvYmJ5ID0gbG9iYmllc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gSWYgbXVsdGlwbGUgYXBwbHkgbG9naW4gbG9naWNcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGVkTG9iYnkgPSBpc0xvZ2dlZEluXHJcbiAgICAgICAgICAgID8gbG9iYmllcy5maW5kKGwgPT4gbC50aXRsZS5pbmNsdWRlcygnSG9tZSBMb2JieScpKVxyXG4gICAgICAgICAgICA6IGxvYmJpZXMuZmluZChsID0+ICFsLnRpdGxlLmluY2x1ZGVzKCdIb21lIExvYmJ5JykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZExvYmJ5Py5nYW1lR3JvdXBMaXN0Py5sZW5ndGgpIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgLy8gU29ydCBieSBvcmRlclxyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZExvYmJ5LmdhbWVHcm91cExpc3RcclxuICAgICAgICAgIC5zbGljZSgpXHJcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5nYW1lX2dyb3VwX29yZGVyIC0gYi5nYW1lX2dyb3VwX29yZGVyKTtcclxuICAgICAgfSksXHJcblxyXG4gICAgICB0YXAoc29ydGVkR3JvdXBzID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRlZEdhbWVHcm91cCA9IHNvcnRlZEdyb3VwcztcclxuICAgICAgfSksXHJcblxyXG4gICAgICAvKiBTdGVwIDI6IEZldGNoIGdhbWVzIGluIHBhcmFsbGVsICovXHJcbiAgICAgIHN3aXRjaE1hcCgoc29ydGVkR3JvdXBzOiBHYW1lR3JvdXBbXSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAoIXNvcnRlZEdyb3Vwcy5sZW5ndGgpIHJldHVybiBvZihbXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RzID0gc29ydGVkR3JvdXBzXHJcbiAgICAgICAgICAuZmlsdGVyKGdyb3VwID0+IGdyb3VwLm5hbWUgJiYgZ3JvdXAubmFtZS50cmltKCkgIT09ICcnKVxyXG4gICAgICAgICAgLm1hcChncm91cCA9PlxyXG4gICAgICAgICAgICB0aGlzLmdhbWVMb2JieUxpYlNlcnZpY2UuZ2V0R2FtZXModGhpcy5icmFuZENvbmZpZz8uYXBpVXJsLCB7XHJcbiAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICBzaXplOiB0aGlzLmJyYW5kQ29uZmlnPy5sb2JieUdhbWVzUGFnZVNpemUsXHJcbiAgICAgICAgICAgICAgZ2FtZUdyb3VwSWQ6IGdyb3VwLmlkXHJcbiAgICAgICAgICAgIH0sIHsgcmVmZXJlcjogdGhpcy5icmFuZENvbmZpZz8uc2l0ZVVybCB9KS5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzOiBhbnkpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBnYW1lR3JvdXBEZXRhaWxzOiBncm91cCxcclxuICAgICAgICAgICAgICAgIGdhbWVzOiByZXNcclxuICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHJlcXVlc3RzKTtcclxuICAgICAgfSlcclxuXHJcbiAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXN1bHQ6IExvYmJ5R2FtZXNbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9iYnlHYW1lcyA9IHJlc3VsdDtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxvYmJ5IGdhbWVzOicsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZk5vR2FtZXNUb1Nob3coKSB7XHJcbiAgICBsZXQgbm9HYW1lcyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRHYW1lcyAmJiBBcnJheS5pc0FycmF5KHRoaXMuZmlsdGVyZWRHYW1lcykgJiYgdGhpcy5maWx0ZXJlZEdhbWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBub0dhbWVzID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMubm9HYW1lc1RvU2hvdyA9IG5vR2FtZXM7XHJcbiAgfVxyXG5cclxuICBnZXRnYW1lQ2xpY2tlZChnYW1lQ29kZTogYW55KTogdm9pZCB7XHJcbiAgICAgIHRoaXMuZ2FtZUNsaWNrZWQuZW1pdChnYW1lQ29kZSk7XHJcbiAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImxvYmJ5X21haW4tbG9iYnlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJsb2JieV9nYW1lLWZpbHRlci1iYWNrZ3JvdW5kXCIgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZCc6IHRoZW1lPy5iYWNrZ3JvdW5kIHx8ICdub25lJyB9XCI+XHJcbiAgICAgICAgPCEtLSBNYWluIEZpbHRlciBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2JieV9maXhlZC1mb290ZXItd2lkdGggbG9iYnlfY2xlYXJmaXhcIiBbbmdTdHlsZV09XCJ7ICdib3JkZXItYm90dG9tJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnbm9uZScgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheS1maWx0ZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggQmFyIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5X3NlYXJjaEJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2JieV9nYW1lLXNlYXJjaFwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJsb2JieV9mb3JtLWlubGluZVwiIChzdWJtaXQpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBjbGFzcz1cImxvYmJ5X2dhbWUtc2VhcmNoLWZvcm1cIiBpZD1cInNlYXJjaElucHV0XCIgbmFtZT1cImdhbWVTZWFyY2hcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiR0FNRSBTRUFSQ0hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2hcIiAoaW5wdXQpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBQcm92aWRlciBTd2lwZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5X3N3aXBlckNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3dpcGVyLWNvbnRhaW5lciAjc3dpcGVyQ29udGFpbmVyICpuZ0lmPVwicHJvdmlkZXJMaXN0ICYmIHByb3ZpZGVyTGlzdC5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzLXBlci12aWV3PVwiMVwiIHNwYWNlLWJldHdlZW49XCI2XCIgc3BlZWQ9XCI1MFwiIFtsb29wXT1cInNob3VsZExvb3BQcm92aWRlcnMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uPVwiZmFsc2VcIiBjc3MtbW9kZT1cInRydWVcIiBbYnJlYWtwb2ludHNdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCc6IHsgc2xpZGVzUGVyVmlldzogMyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzIwMCc6IHsgc2xpZGVzUGVyVmlldzogNCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzMyMCc6IHsgc2xpZGVzUGVyVmlldzogNCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzQ4MCc6IHsgc2xpZGVzUGVyVmlldzogNiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzc2OCc6IHsgc2xpZGVzUGVyVmlldzogOCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MSc6IHsgc2xpZGVzUGVyVmlldzogMTAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjgwJzogeyBzbGlkZXNQZXJWaWV3OiAxMiB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzd2lwZXItc2xpZGUgKm5nRm9yPVwibGV0IHByb3ZpZGVyIG9mIHByb3ZpZGVyTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2JieV9wcm92aWRlci1zbGlkZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJicmFuZENvbmZpZz8ucHJvdmlkZXJzSWNvbnNEaXIgKyAnLycgKyBwcm92aWRlci52ZW5kb3JDb2RlICsgJy5zdmcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwicHJvdmlkZXIubmFtZVwiIChjbGljayk9XCJmaWx0ZXJQcm92aWRlckdhbWVzKDAsIHByb3ZpZGVyLnZlbmRvckNvZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N3aXBlci1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmF2aWdhdGlvbiBidXR0b25zIC0gT1VUU0lERSAuc3dpcGVyQ29udGFpbmVyIGJ1dCBJTlNJREUgLnNlYXJjaEJhciAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyLW5hdmlnYXRpb24tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzd2lwZXItYnV0dG9uLXByZXZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnLS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcic6IHRoZW1lPy5idXR0b25CYWNrZ3JvdW5kQ29sb3IgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHJldmlvdXMgcHJvdmlkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tYXJyb3ctbGVmdC1nYW1lc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3dpcGVyLWJ1dHRvbi1uZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJy0tc3dpcGVyLW5hdmlnYXRpb24tY29sb3InOiB0aGVtZT8uYnV0dG9uQmFja2dyb3VuZENvbG9yIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk5leHQgcHJvdmlkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tYXJyb3ctcmlnaHQtZ2FtZXNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLXByb3ZpZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNrdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJmLXRhYnMgcHJvdmlkZXJJY29ucy11bC1kZXNrdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwiZmF2b3VyaXRlSWNvblwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnRcIiAoY2xpY2spPVwiZmlsdGVyRmF2b3VyaXRlR2FtZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVjZW50R2FtZXN0dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IC00MnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHRpcCB0dGlwLWFycm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXZvcml0ZSBHYW1lc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy1kb3duXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTU2cHhcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheS1maWx0ZXItY29udGVudCBidHRcIiBpZD1cInJlY2VudEdhbWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhlYXJ0XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlY2VudCBHYW1lcyBJY29uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBpZD1cInJlY2VudEdhbWVzSWNvblwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnRcIiAoY2xpY2spPVwiZmlsdGVyTGFzdFBsYXllZEdhbWVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlY2VudEdhbWVzdHRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IG1hcmdpbi1sZWZ0OiAtNDJweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInR0aXAgdHRpcC1hcnJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFzdCBwbGF5ZWQgR2FtZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctZG93blwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC01NnB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnQgYnR0XCIgaWQ9XCJyZWNlbnRHYW1lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9ja1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBIb3QgR2FtZXMgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9XCJob3RHYW1lc0ljb25cIiBbbmdTdHlsZV09XCJ7ICdib3JkZXInOiB0aGVtZT8uYm9yZGVyU2VhcmNoIHx8ICdub25lJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWZpbHRlci1jb250ZW50XCIgKGNsaWNrKT1cImZpbHRlckhvdEdhbWVzKDAsICdob3QnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiaG90R2FtZXN0dFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IC0yM3B4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHRpcCB0dGlwLWFycm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3QgR2FtZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctZG93blwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0zNXB4XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc3BsYXktZmlsdGVyLWNvbnRlbnQgYnR0XCIgaWQ9XCJob3RHYW1lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maXJlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEdhbWUgQ2F0ZWdvcnkgRHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGlkPVwiZ2FtZUNhdGVnb3J5XCIgW25nU3R5bGVdPVwieyAnYm9yZGVyJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnbm9uZScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ2FtZS1jYXRlZ29yeS1saW5rIGdhbWUtY2F0ZWdvcnktbGluay1kZXNrdG9wIGhpZGRlbi14cyBoaWRkZW4tc20gZGlzcGxheS1maWx0ZXItY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjYXRlZ29yeS1idG5cIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ3RyYW5zcGFyZW50J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cInRvZ2dsZUdhbWVDYXRlZ29yeVRvcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeUxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2FtZUNhdGVnb3J5TGlua1wiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29uLWFuZ2xlLWRvd24nOiAhY2F0ZWdvcnlDaG9zZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNvbi1jbG9zZSc6IGNhdGVnb3J5Q2hvc2VuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B1bGwtcmlnaHQnOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBhcmlhLWxhYmVsPVwiVG9nZ2xlIGNhdGVnb3J5IG1lbnVcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ3RyYW5zcGFyZW50J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cImNhdGVnb3J5Q2hvc2VuID8gRHJvcGRvd25DbG9zZSgpIDogdG9nZ2xlR2FtZUNhdGVnb3J5VG9wKClcIj48L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEdhbWUgQ2F0ZWdvcnkgRHJvcGRvd24gTWVudSAocG9zaXRpb25lZCBkaXJlY3RseSBiZWxvdykgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJnYW1lQ2F0ZWdvcnlUb3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhcmZpeCBnYW1lLWNhdGVnb3J5LWxpc3QgZ2FtZS1jYXRlZ29yeS1saXN0LWZvb3RlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJzaG93R2FtZUNhdGVnb3J5VG9wID8gJ2Jsb2NrJyA6ICdub25lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbWUtY2F0ZWdvcnktbGlzdC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImdhbWUtY2F0ZWdvcnktbGlzdC1pdGVtXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyNmZmYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhlbWU/LmJhY2tncm91bmQgfHwgJyMyNjI2MjYnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXInOiB0aGVtZT8uYm9yZGVyIHx8ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJnYW1lLWNhdGVnb3J5LWxpc3QtaXRlbS1saVwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBsb2JieUdhbWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tncm91cC5nYW1lR3JvdXBEZXRhaWxzLmlkfX0tTGVmdFNpZGVCdXR0b24tZm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYXRlZ29yeUxhYmVsID0gZ3JvdXAuZ2FtZUdyb3VwRGV0YWlscy5uYW1lOyBmaWx0ZXJHcm91cEdhbWVzKDAsIGdyb3VwLmdhbWVHcm91cERldGFpbHMuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5nYW1lR3JvdXBEZXRhaWxzLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gIEdhbWVzIFNlY3Rpb24gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2FtZXMtYmFja2dyb3VuZFwiIGlkPVwiZ2FtZXNMb2JieVwiICpuZ0lmPVwiIWZpbHRlckFjdGl2ZVwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGxvYmJ5R2FtZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImdhbWVzLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ldy1nYW1lLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIFtuZ1N0eWxlXT1cInsgJ2NvbG9yJzogdGhlbWU/LnRleHRDb2xvciB8fCAnI0ZGRkZGRicgfVwiPnt7Z3JvdXAuZ2FtZUdyb3VwRGV0YWlscy5uYW1lfX08L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0bi1uZXdnYW1lc3RyaXBcIiBbbmdTdHlsZV09XCJ7ICdib3JkZXInOiAodGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnbm9uZScpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGhvdmVyZWRWaWV3QWxsSW5kZXggPT09IGkgPyAodGhlbWU/LmJ1dHRvbkJhY2tncm91bmRDb2xvciB8fCAnJykgOiAodGhlbWU/LmJhY2tncm91bmQgfHwgJyMyNjI2MjYnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwidmlld0dhbWVDYXRlZ29yeShncm91cC5nYW1lR3JvdXBEZXRhaWxzKVwiIChtb3VzZWVudGVyKT1cImhvdmVyZWRWaWV3QWxsSW5kZXggPSBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZFZpZXdBbGxJbmRleCA9IG51bGxcIj5WSUVXIEFMTDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxvYmJ5X2J0bi1BcnJvdy1sZWZ0XCIgW25nQ2xhc3NdPVwieyAncHVsc2UnOiBwdWxzaW5nQnV0dG9uID09PSAncHJldicgKyBpIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdib3JkZXInOiBob3ZlcmVkQnV0dG9uID09PSAncHJldicgKyBpID8gKHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnKTonMXB4IHNvbGlkICNmZmYnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBhcmlhLWxhYmVsPVwiUHJldmlvdXMgZ2FtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidHJpZ2dlclB1bHNlKCdwcmV2JyArIGkpOyBzbGlkZVByZXYoaSlcIiAobW91c2VlbnRlcik9XCJob3ZlcmVkQnV0dG9uID0gJ3ByZXYnICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRCdXR0b24gPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXJyb3ctaWNvbiBhcnJvdy1sZWZ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxvYmJ5X2J0bi1BcnJvdy1yaWdodFwiIFtuZ0NsYXNzXT1cInsgJ3B1bHNlJzogcHVsc2luZ0J1dHRvbiA9PT0gJ25leHQnICsgaSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYm9yZGVyJzogaG92ZXJlZEJ1dHRvbiA9PT0gJ25leHQnICsgaSA/ICh0aGVtZT8uYm9yZGVyU2VhcmNoIHx8ICdub25lJykgOiAnMXB4IHNvbGlkICNmZmYnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBhcmlhLWxhYmVsPVwiTmV4dCBnYW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyUHVsc2UoJ25leHQnICsgaSk7IHNsaWRlTmV4dChpKVwiIChtb3VzZWVudGVyKT1cImhvdmVyZWRCdXR0b24gPSAnbmV4dCcgKyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZEJ1dHRvbiA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcnJvdy1pY29uIGFycm93LXJpZ2h0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpcGVyQ29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgd2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN3aXBlci1jb250YWluZXIgI2dhbWVTd2lwZXJDb250YWluZXIgKm5nSWY9XCJncm91cC5nYW1lcyAmJiBncm91cC5nYW1lcy5sZW5ndGhcIiBzbGlkZXMtcGVyLXZpZXc9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UtYmV0d2Vlbj1cIjEwXCIgc3BlZWQ9XCI1MFwiIFtsb29wXT1cInNob3VsZExvb3BHYW1lc0Zvckdyb3VwKGdyb3VwLmdhbWVzKVwiIG5hdmlnYXRpb249XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzcy1tb2RlPVwiZmFsc2VcIiBbYnJlYWtwb2ludHNdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzE5MCc6IHsgc2xpZGVzUGVyVmlldzogMSwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzM1MCc6IHsgc2xpZGVzUGVyVmlldzogMiwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzUyMCc6IHsgc2xpZGVzUGVyVmlldzogMywgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzY3Nic6IHsgc2xpZGVzUGVyVmlldzogNCwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzgzNCc6IHsgc2xpZGVzUGVyVmlldzogNCwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5OCc6IHsgc2xpZGVzUGVyVmlldzogNSwgc3BhY2VCZXR3ZWVuOiAxMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzExNTgnOiB7IHNsaWRlc1BlclZpZXc6IDYsIHNwYWNlQmV0d2VlbjogMTAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjgwJzogeyBzbGlkZXNQZXJWaWV3OiA2LCBzcGFjZUJldHdlZW46IDEwIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3dpcGVyLXNsaWRlICpuZ0Zvcj1cImxldCBnYW1lIG9mIGdyb3VwLmdhbWVzOyBsZXQgZ2FtZUluZGV4ID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1nYW1lLWlkXT1cImkgKyAnLScgKyBnYW1lLmdhbWVDb2RlXCIgY2xhc3M9XCJsb2JieV9nYW1lcy1ob21lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FtZS1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbWUtY2FyZF9fY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRHYW1lS2V5ID0gZ2FtZUluZGV4ICsgJy0nICsgIGdhbWUuZ2FtZUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkR2FtZUtleSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbWUtY2FyZF9fYWN0aW9uLWJ0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhvdmVyZWRHYW1lS2V5ID09PSBnYW1lSW5kZXggKyAnLScgKyBnYW1lLmdhbWVDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBnYW1lLWNhcmRfX2FjdGlvbi1idG4tLXBsYXlcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy5idXR0b25CYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZjdkMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0Z2FtZUNsaWNrZWQoZ2FtZS5nYW1lQ29kZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbGF5XCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpYmJvblwiPjxzcGFuIFtuZ0NsYXNzXT1cImdhbWUudGFnTGlzdC5pbmNsdWRlcygnbmV3JykgPyAnbmV3JyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1lLnRhZ0xpc3QuaW5jbHVkZXMoXCJuZXdcIikgPyBcIk5FV1wiIDogXCJcIiB9fTwvc3Bhbj48c3BhbiBbbmdDbGFzc109XCJnYW1lLnRhZ0xpc3QuaW5jbHVkZXMoJ2hvdCcpID8gJ2hvdCcgOiAnJ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtZS50YWdMaXN0LmluY2x1ZGVzKFwiaG90XCIpID8gXCJIT1RcIiA6IFwiXCIgfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX2ltZyBnYW1lLWNhcmRfX2ltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1ncmFkaWVudFwiIFtzcmNdPVwiZ2V0R2FtZUltYWdlKGdhbWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudClcIiBbYWx0XT1cImdhbWUubmFtZVwiIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2FtZS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX3RleHRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhlbWU/LmdhbWV0ZXh0YmFja2dyb3VuZCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjxzcGFuIGNsYXNzPVwiZ2FtZS1jYXJkX19mYXZpY29uXCI+PGkgY2xhc3M9XCJmYXIgZmEtaGVhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L3NwYW4+PHNwYW4gY2xhc3M9XCJnYW1lLWNhcmQtLW5hbWVcIj57eyBnYW1lLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLXNsaWRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3dpcGVyLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gRmlsdGVyZWQgR2FtZXMgU2VjdGlvbnMtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJnYW1lcy1iYWNrZ3JvdW5kXCIgaWQ9XCJmaWx0ZXJlZC1nYW1lcy1zZWN0aW9uXCIgKm5nSWY9XCJmaWx0ZXJBY3RpdmVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9iYnlfZ2FtZXMtcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRcIiBbYXR0ci5kYXRhLWdhbWUtaWRdPVwiZ2FtZUluZGV4ICsgJy0nICsgZ2FtZS5nYW1lQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ2FtZSBvZiBmaWx0ZXJlZEdhbWVzOyBsZXQgZ2FtZUluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX2NvbnRlbnRcIiAobW91c2VlbnRlcik9XCJob3ZlcmVkR2FtZUtleSA9IGdhbWVJbmRleCArICctJyArICBnYW1lLmdhbWVDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkR2FtZUtleSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FtZS1jYXJkX19hY3Rpb24tYnRuXCIgKm5nSWY9XCJob3ZlcmVkR2FtZUtleSA9PT0gZ2FtZUluZGV4ICsgJy0nICsgZ2FtZS5nYW1lQ29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBnYW1lLWNhcmRfX2FjdGlvbi1idG4tLXBsYXlcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6IHRoZW1lPy5idXR0b25CYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZjdkMDAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyJzogdGhlbWU/LmJvcmRlclNlYXJjaCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cImdldGdhbWVDbGlja2VkKGdhbWUuZ2FtZUNvZGUpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsYXlcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmliYm9uXCI+PHNwYW4gW25nQ2xhc3NdPVwiZ2FtZS50YWdMaXN0LmluY2x1ZGVzKCduZXcnKSA/ICduZXcnIDogJydcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbWUudGFnTGlzdC5pbmNsdWRlcyhcIm5ld1wiKSA/IFwiTkVXXCIgOiBcIlwiIH19PC9zcGFuPjxzcGFuIFtuZ0NsYXNzXT1cImdhbWUudGFnTGlzdC5pbmNsdWRlcygnaG90JykgPyAnaG90JyA6ICcnXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1lLnRhZ0xpc3QuaW5jbHVkZXMoXCJob3RcIikgPyBcIkhPVFwiIDogXCJcIiB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FtZS1jYXJkX19pbWcgZ2FtZS1jYXJkX19pbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1ncmFkaWVudFwiIFtzcmNdPVwiZ2V0R2FtZUltYWdlKGdhbWUpXCIgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiZ2FtZS5uYW1lXCIgbG9hZGluZz1cImxhenlcIiBbdGl0bGVdPVwiZ2FtZS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnYW1lLWNhcmRfX3RleHRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InOiB0aGVtZT8udGV4dENvbG9yIHx8ICcjZmZmJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogdGhlbWU/LmdhbWV0ZXh0YmFja2dyb3VuZCB8fCAnI2ZmN2QwMCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPjxzcGFuIGNsYXNzPVwiZ2FtZS1jYXJkX19mYXZpY29uXCI+PGkgY2xhc3M9XCJmYXIgZmEtaGVhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvc3Bhbj48c3BhbiBjbGFzcz1cImdhbWUtY2FyZC0tbmFtZVwiPnt7IGdhbWUubmFtZSB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYmJ5X2xvYWRNb3JlQnRuXCIgKm5nSWY9XCJmaWx0ZXJTaG93TG9hZE1vcmVcIj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gbG9hZC1tb3JlLWJ0blwiIFtuZ1N0eWxlXT1cInsgJ2JvcmRlcic6IHRoZW1lPy5ib3JkZXJTZWFyY2ggfHwgJ25vbmUnIH1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRNb3JlRmlsdGVyZWRHYW1lcygpXCI+XHJcbiAgICAgICAgICAgICAgICBMT0FEIE1PUkVcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZ2FtZXMtYmFja2dyb3VuZCBsb2JieV9ub0dhbWVzTWVzc2FnZVwiIGlkPVwibm9HYW1lc01lc3NhZ2VcIiAqbmdJZj1cIm5vR2FtZXNUb1Nob3dcIj5cclxuICAgICAgICA8cD5OTyBHQU1FUyBGT1VORDwvcD5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|