@snabcentr/client-core 2.50.0 → 2.52.1

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.
@@ -128,6 +128,10 @@ export declare class ScProduct extends ScSeoResource implements ScIProductDTO {
128
128
  * Признак необходимости игнорировать проверку минимального количества и кратности при добавлении товара в корзину и создании заказа.
129
129
  */
130
130
  ignoreMinCountCheck: boolean;
131
+ /**
132
+ * Признак того, что продукт является скрытым.
133
+ */
134
+ isHidden?: boolean;
131
135
  /**
132
136
  * Инициализирует экземпляр класса {@link ScProduct}.
133
137
  *
@@ -88,4 +88,8 @@ export interface ScIProductDTO extends ScISeoResourceDTO {
88
88
  * Данные о клиентской скидке.
89
89
  */
90
90
  discount?: ScIDiscount;
91
+ /**
92
+ * Признак того, что продукт является скрытым.
93
+ */
94
+ isHidden?: boolean;
91
95
  }
@@ -49,18 +49,6 @@ export declare class ScCatalogService {
49
49
  * {@link Map} коллекция пар ключ-значение для кэшированных товаров категории каталога.
50
50
  */
51
51
  private categoryProductsMap;
52
- /**
53
- * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров категории.
54
- *
55
- * @deprecated
56
- */
57
- private recommendedProductsByCategoryMap;
58
- /**
59
- * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров товара.
60
- *
61
- * @deprecated
62
- */
63
- private recommendedProductsByProductMap;
64
52
  /**
65
53
  * {@link Map} коллекция пар ключ-значение для кэширования истории цен.
66
54
  */
@@ -70,9 +58,13 @@ export declare class ScCatalogService {
70
58
  */
71
59
  private readonly idOrSlugPipe;
72
60
  /**
73
- * {@link Map} коллекция пар ключ-значение для сопоставления slug и id категорий при кеширование запросов, если идентификатор отличаться от установленного в проекте (slug/id).
61
+ * {@link Map} коллекция пар ключ-значение для сопоставления slug и id категорий при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).
74
62
  */
75
63
  private readonly categoryIdOrSlugMap;
64
+ /**
65
+ * {@link Map} коллекция пар ключ-значение для сопоставления slug и id товаров при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).
66
+ */
67
+ private readonly productIdOrSlugMap;
76
68
  /**
77
69
  * Число первых записей товаров со скидкой.
78
70
  */
@@ -115,14 +107,6 @@ export declare class ScCatalogService {
115
107
  * @param categoryIdOrSlug Идентификатор или slug категории товаров.
116
108
  */
117
109
  getCategoryFromMap(categoryIdOrSlug?: number | string): ScCategory | undefined;
118
- /**
119
- * Возвращает товар из коллекции каталога.
120
- *
121
- * @deprecated Удалить в рамках задачи TASK[#10153].
122
- *
123
- * @param productIdOrSlug Идентификатор или slug товара/услуги.
124
- */
125
- getProductFromMap(productIdOrSlug: number | string): ScProduct | undefined;
126
110
  /**
127
111
  * Создает запрос получения списка категорий товаров или список корневых категорий, если идентификатор категории не указан.
128
112
  *
@@ -190,7 +174,8 @@ export declare class ScCatalogService {
190
174
  *
191
175
  * @param productIdOrSlug Идентификатор или slug товара/услуги.
192
176
  */
193
- getProductInfo$(productIdOrSlug: number | string): Observable<ScProduct>;
177
+ getProductData$(productIdOrSlug: number | string): Observable<ScProduct>;
178
+ getProductDataCached$(productIdOrSlug: number | string): Observable<ScProduct | null>;
194
179
  /**
195
180
  * Создаёт запрос на получение генерируемого файла прайс-листа в формате {@link Blob}, и выгружает пользователю в браузер.
196
181
  *
@@ -198,26 +183,6 @@ export declare class ScCatalogService {
198
183
  * @param categoryId Идентификатор категории, для которой загружается прайс-лист.
199
184
  */
200
185
  downloadPrice$(type: ScMimeTypes, categoryId?: number): Observable<Blob>;
201
- /**
202
- * Создает запрос получения списка ранее заказанных товаров.
203
- *
204
- * @deprecated Удалить в рамках задачи TASK[#10155].
205
- */
206
- getPreviouslyOrderedProducts$(): Observable<ScProduct[] | null>;
207
- /**
208
- * Создает запрос на получение списка рекомендованных товаров для категории.
209
- *
210
- * @param categoryIdOrSlug Идентификатор или slug категории товаров.
211
- * @deprecated
212
- */
213
- getRecommendedProductsByCategory$(categoryIdOrSlug: number | string): Observable<ScProduct[] | null>;
214
- /**
215
- * Создает запрос на получение списка рекомендованных товаров для продукта.
216
- *
217
- * @param productIdOrSlug Идентификатор или slug товара/услуги.
218
- * @deprecated
219
- */
220
- getRecommendedProductsByProduct$(productIdOrSlug: number | string): Observable<ScProduct[] | null>;
221
186
  /**
222
187
  * Запрос на уведомление пользователя о поступлении продукта.
223
188
  *
@@ -13,6 +13,10 @@ export declare class ScFeedbackService {
13
13
  private readonly http;
14
14
  private readonly userMetrikaService;
15
15
  private readonly feedbackApi;
16
+ /**
17
+ * Сервис для работы с UTM-метками.
18
+ */
19
+ private readonly utmService;
16
20
  /**
17
21
  * Список форм обратной связи.
18
22
  */
@@ -58,6 +58,7 @@ export class ScProduct extends ScSeoResource {
58
58
  this.properties = productDTO.properties;
59
59
  this.discount = productDTO.discount;
60
60
  this.ord = ord;
61
+ this.isHidden = productDTO.isHidden;
61
62
  }
62
63
  }
63
64
  /**
@@ -143,4 +144,4 @@ export class ScProduct extends ScSeoResource {
143
144
  }
144
145
  }
145
146
  }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY2F0YWxvZy9kdG8vc2MtcHJvZHVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBa0p4Qzs7Ozs7T0FLRztJQUNILFlBQW1CLFVBQWdDLEVBQUUsTUFBYyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQTFDdEI7O1dBRUc7UUFDSSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBT2pDOztXQUVHO1FBQ0ksV0FBTSxHQUFZLEtBQUssQ0FBQztRQU8vQjs7V0FFRztRQUNJLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBT3ZDOztXQUVHO1FBQ0ksd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBV3hDLElBQUksVUFBVSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDO1lBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUM3RSxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0csSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDMUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNwQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNuQixDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25GLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsa0JBQWtCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNySCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxXQUFtQixDQUFDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsV0FBbUIsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCLENBQUMsV0FBbUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0kscUJBQXFCLENBQUMsV0FBbUI7UUFDNUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLEtBQUssU0FBUyxDQUFDO0lBQ3hHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCLENBQUMsU0FBdUI7UUFDN0MsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDO1FBRW5HLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBRUQsa0pBQWtKO1FBQ2xKLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFeEcsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNmLEtBQUssQ0FBQztnQkFDRixPQUFPLGVBQWUsQ0FBQztZQUMzQixLQUFLLENBQUM7Z0JBQ0YsT0FBTyxjQUFjLENBQUM7WUFDMUIsS0FBSyxDQUFDO2dCQUNGLE9BQU8sbUJBQW1CLENBQUM7WUFDL0I7Z0JBQ0ksT0FBTyxhQUFhLFdBQVcsRUFBRSxDQUFDO1FBQzFDLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUdWlEYXkgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcblxuaW1wb3J0IHsgU2NDYXJ0SXRlbSB9IGZyb20gJy4uLy4uL2NhcnQvZHRvL3NjLWNhcnQtaXRlbSc7XG5pbXBvcnQgeyBTY0lXYXJlaG91c2VTdG9ja0NvdW50IH0gZnJvbSAnLi4vLi4vd2FyZWhvdXNlL2R0by9zYy1pLXdhcmVob3VzZS1zdG9jay1jb3VudCc7XG5pbXBvcnQgeyBTY0lXYXJlaG91c2UgfSBmcm9tICcuLi8uLi93YXJlaG91c2UvZHRvL3NjLXdhcmVob3VzZSc7XG5pbXBvcnQgeyBTY0lQcm9kdWN0RFRPIH0gZnJvbSAnLi4vaW50ZXJuYWwvc2MtaS1wcm9kdWN0LWR0byc7XG5pbXBvcnQgeyBTY1ByaWNlSGlzdG9yeSB9IGZyb20gJy4uL3R5cGVzL3NjLXByaWNlLWhpc3RvcnknO1xuaW1wb3J0IHsgU2NDYXRlZ29yeSB9IGZyb20gJy4vc2MtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJRGlzY291bnQgfSBmcm9tICcuL3NjLWktZGlzY291bnQnO1xuaW1wb3J0IHsgU2NJUHJvZHVjdEltYWdlcyB9IGZyb20gJy4vc2MtaS1wcm9kdWN0LWltYWdlcyc7XG5pbXBvcnQgeyBTY0lQcm9wZXJ0aWVzIH0gZnJvbSAnLi9zYy1pLXByb3BlcnRpZXMnO1xuaW1wb3J0IHsgU2NTZW9SZXNvdXJjZSB9IGZyb20gJy4vc2Mtc2VvLXJlc291cmNlJztcblxuLyoqXG4gKiDQnNC+0LTQtdC70Ywg0LTQsNC90L3Ri9GFINGC0L7QstCw0YDQsC/Rg9GB0LvRg9Cz0LguXG4gKi9cbmV4cG9ydCBjbGFzcyBTY1Byb2R1Y3QgZXh0ZW5kcyBTY1Nlb1Jlc291cmNlIGltcGxlbWVudHMgU2NJUHJvZHVjdERUTyB7XG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwL9GD0YHQu9GD0LPQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaWQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCh0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2x1Zzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JDRgNGC0LjQutGD0LsuXG4gICAgICovXG4gICAgcHVibGljIGNvZGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCd0LDQt9Cy0LDQvdC40LUg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQodGC0L7QuNC80L7RgdGC0Ywg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0Lgg0LIg0LLQsNC70Y7RgtC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb3N0PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINGA0YPQsdC70Y/RhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29zdFJ1Yj86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCU0LDRgtCwINGD0YHRgtCw0L3QvtCy0LrQuCDRhtC10L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29zdERhdGU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQktCw0LvRjtGC0LAg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0LguXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbmN5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQldC00LjQvdC40YbQsCDQuNC30LzQtdGA0LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIHVuaXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCV0LTQuNC90LjRhtCwINC40LfQvNC10YDQtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHVibGljIHF1YW50aXR5VW5pdDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0LAg0LTQu9GPINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWluQ291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLCDQtNC+0YHRgtGD0L/QvdC+0Lwg0L3QsCDRgdC60LvQsNC00LDRhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RvY2tDb3VudD86IFNjSVdhcmVob3VzZVN0b2NrQ291bnRbXTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INGC0L7QstCw0YDQsCBcItCf0L7QtCDQt9Cw0LrQsNC3XCIuXG4gICAgICovXG4gICAgcHVibGljIG9uT3JkZXI/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog0J3QvtGA0LzQsCDRg9C/0LDQutC+0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBwYWNrPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgtC+0LLQsNGALCDRg9GB0LvRg9Cz0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjRjyDRj9Cy0LvRj9GO0YLRgdGPINC40LfQsdGA0LDQvdC90YvQvNC4INC00LvRjyDQutC70LjQtdC90YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYXZvcml0ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YLQvtCy0LDRgCDQuNC70Lgg0YPRgdC70YPQs9CwLCDQsdGL0Lsg0YDQsNC90LXQtSDQt9Cw0LrQsNC30LDQvS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNQcmV2aW91c2x5T3JkZXJlZD86IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LjQt9C+0LHRgNCw0LbQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaW1hZ2VzPzogcmVhZG9ubHkgU2NJUHJvZHVjdEltYWdlc1tdO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INC60LDRgtC10LPQvtGA0LjQuSDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHVibGljIGNhdGVnb3JpZXM6IFNjQ2F0ZWdvcnlbXTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgdCy0L7QudGB0YLQsi4g0KfQuNGB0LvQviDRgdCy0L7QudGB0YLQsiDQsiDQvtCx0YrQtdC60YLQtSDQvdC1INC+0LPRgNCw0L3QuNGH0LXQvdC+LlxuICAgICAqL1xuICAgIHB1YmxpYyBwcm9wZXJ0aWVzPzogU2NJUHJvcGVydGllcztcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDQutC70LjQtdC90YLRgdC60L7QuSDRgdC60LjQtNC60LUuXG4gICAgICovXG4gICAgcHVibGljIGRpc2NvdW50PzogU2NJRGlzY291bnQ7XG5cbiAgICAvKipcbiAgICAgKiDQoNC+0LTQuNGC0LXQu9GM0YHQutCw0Y8g0LrQsNGC0LXQs9C+0YDQuNGPLCDQsiDQutC+0YLQvtGA0L7QuSDQvdCw0YXQvtC00LjRgtGB0Y8g0YLQvtCy0LDRgCDQuNC70Lgg0YPRgdC70YPQs9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJlbnRDYXRlZ29yeT86IFNjQ2F0ZWdvcnk7XG5cbiAgICAvKipcbiAgICAgKiDQntGB0L3QvtCy0L3QsNGPINC60LDRgtC10LPQvtGA0LjRjyDQtNC70Y8g0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0LguXG4gICAgICovXG4gICAgcHVibGljIHByaW1hcnlDYXRlZ29yeT86IFNjQ2F0ZWdvcnk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQvdCw0LvQuNGH0LjRjyDQuNC30L7QsdGA0LDQttC10L3QuNGPINGDINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzSW1hZ2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LrRgiDRjdC70LXQvNC10L3RgtCwINC60L7RgNC30LjQvdGLLlxuICAgICAqL1xuICAgIHB1YmxpYyBjYXJ0SXRlbT86IFNjQ2FydEl0ZW07XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGC0L7QstCw0YAg0L7RgtGB0YPRgtGB0YLQstGD0LXRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNOdWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0YDRj9C00L7QuiDRgdC70LXQtNC+0LLQsNC90LjRjyDRgtC+0LLQsNGA0LAg0LIg0YHQv9C40YHQutC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBvcmQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INGC0L7Qs9C+LCDRh9GC0L4g0YLQvtCy0LDRgCDRgdC60YDRi9C70Lgg0YTQuNC70YzRgtGA0L7QvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNIaWRkZW5GaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCY0YHRgtC+0YDQuNGPINC40LfQvNC10L3QtdC90LjRjyDRhtC10L3RiyDRgtC+0LLQsNGA0LAg0LjQu9C4INGD0YHQu9GD0LPQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJpY2VIaXN0b3J5PzogU2NQcmljZUhpc3Rvcnk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/RgNC+0LLQtdGA0LrRgyDQvNC40L3QuNC80LDQu9GM0L3QvtCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAg0Lgg0LrRgNCw0YLQvdC+0YHRgtC4INC/0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCDRgtC+0LLQsNGA0LAg0LIg0LrQvtGA0LfQuNC90YMg0Lgg0YHQvtC30LTQsNC90LjQuCDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHVibGljIGlnbm9yZU1pbkNvdW50Q2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NQcm9kdWN0fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0RFRPINCU0LDQvdC90YvQtSDQviDQv9GA0L7QtNGD0LrRgtC1LlxuICAgICAqIEBwYXJhbSBvcmQg0J/QvtGA0Y/QtNC+0Log0YHQu9C10LTQvtCy0LDQvdC40Y8g0L/RgNC+0LTRg9C60YLQsCDQsiDRgdC/0LjRgdC60LUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb2R1Y3REVE86IFNjSVByb2R1Y3REVE8gfCBudWxsLCBvcmQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgc3VwZXIocHJvZHVjdERUTyk7XG5cbiAgICAgICAgaWYgKHByb2R1Y3REVE8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNOdWxsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfQotC+0LLQsNGAINC90LUg0L3QsNC50LTQtdC9JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBwcm9kdWN0RFRPLmlkO1xuICAgICAgICAgICAgdGhpcy5zbHVnID0gcHJvZHVjdERUTy5zbHVnO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gcHJvZHVjdERUTy5uYW1lO1xuICAgICAgICAgICAgdGhpcy5jb3N0ID0gcHJvZHVjdERUTy5jb3N0O1xuICAgICAgICAgICAgdGhpcy5jb3N0UnViID0gcHJvZHVjdERUTy5jb3N0UnViO1xuICAgICAgICAgICAgdGhpcy5jb3N0RGF0ZSA9IHByb2R1Y3REVE8uY29zdERhdGU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5ID0gcHJvZHVjdERUTy5jdXJyZW5jeTtcbiAgICAgICAgICAgIHRoaXMuY29kZSA9IHByb2R1Y3REVE8uY29kZTtcbiAgICAgICAgICAgIHRoaXMudW5pdCA9IHByb2R1Y3REVE8udW5pdDtcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlVbml0ID0gcHJvZHVjdERUTy5xdWFudGl0eVVuaXQ7XG4gICAgICAgICAgICB0aGlzLm1pbkNvdW50ID0gcHJvZHVjdERUTy5taW5Db3VudDtcbiAgICAgICAgICAgIHRoaXMuc3RvY2tDb3VudCA9IHByb2R1Y3REVE8uc3RvY2tDb3VudDtcbiAgICAgICAgICAgIHRoaXMub25PcmRlciA9IHByb2R1Y3REVE8ub25PcmRlcjtcbiAgICAgICAgICAgIHRoaXMucGFjayA9IHByb2R1Y3REVE8ucGFjaztcbiAgICAgICAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IEJvb2xlYW4ocHJvZHVjdERUTy5pc0Zhdm9yaXRlKTtcbiAgICAgICAgICAgIHRoaXMuaXNQcmV2aW91c2x5T3JkZXJlZCA9IHByb2R1Y3REVE8uaXNQcmV2aW91c2x5T3JkZXJlZDtcbiAgICAgICAgICAgIHRoaXMuaGFzSW1hZ2UgPSAocHJvZHVjdERUTy5pbWFnZXMgJiYgcHJvZHVjdERUTy5pbWFnZXMubGVuZ3RoID4gMCkgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmltYWdlcyA9IHByb2R1Y3REVE8uaW1hZ2VzPy5zbGljZSgpLnNvcnQoKGltZzEsIGltZzIpID0+IE51bWJlcihpbWcyLmlzRGVmYXVsdCkgLSBOdW1iZXIoaW1nMS5pc0RlZmF1bHQpKTtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHByb2R1Y3REVE8uY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBuZXcgU2NDYXRlZ29yeShjYXRlZ29yeSkpO1xuICAgICAgICAgICAgdGhpcy5wcmltYXJ5Q2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pc1ByaW1hcnkpO1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVNaW5Db3VudENoZWNrID0gcHJvZHVjdERUTy5wcm9wZXJ0aWVzPy5pZ25vcmVNaW5Db3VudENoZWNrID8/IHRoaXMucHJvcGVydGllcz8uaWdub3JlTWluQ291bnRDaGVjayA/PyB0aGlzLmlnbm9yZU1pbkNvdW50Q2hlY2s7XG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9kdWN0RFRPLnByb3BlcnRpZXM7XG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50ID0gcHJvZHVjdERUTy5kaXNjb3VudDtcbiAgICAgICAgICAgIHRoaXMub3JkID0gb3JkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INGBINCy0LDQu9GO0YLQvtC5INC4INC10LTQuNC90LjRhtC10Lkg0LjQt9C80LXRgNC10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29zdFN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3N0ID8gYCR7dGhpcy5jb3N0LnRvTG9jYWxlU3RyaW5nKCl9ICR7dGhpcy5jdXJyZW5jeX0gLyAke3RoaXMudW5pdH1gIDogJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINGA0YPQsdC70Y/RhSDQuCDRgSDQtdC00LjQvdC40YbQtdC5INC40LfQvNC10YDQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvc3RSdWJTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29zdFJ1YiA/IGAke3RoaXMuY29zdFJ1Yi50b0xvY2FsZVN0cmluZygpfSDigr0gLyAke3RoaXMudW5pdH1gIDogJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INGBINCy0LDQu9GO0YLQvtC5INC4INC10LTQuNC90LjRhtC10Lkg0LjQt9C80LXRgNC10L3QuNGPINC00L4g0L/RgNC40LzQtdC90LXQvdC40Y8g0YHQutC40LTQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzY291bnRDb3N0U3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2NvdW50Py5vbGRDb3N0ID8gYCR7dGhpcy5kaXNjb3VudC5vbGRDb3N0LnRvTG9jYWxlU3RyaW5nKCl9ICR7dGhpcy5jdXJyZW5jeX0gLyAke3RoaXMudW5pdH1gIDogJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgtC+0LLQsNGAINC/0YDQvtC00LDRkdGC0YHRjyDQsiDRgNGD0LHQu9GP0YUuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwcmljZUluUnViKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW5jeSA9PT0gJ+KCvSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/QtdGA0LLQvtC1INC40LfQvtCx0YDQsNC20LXQvdC40LUg0YLQvtCy0LDRgNCwLiDQldGB0LvQuCDQuNC30L7QsdGA0LDQttC10L3QuNC5INC90LXRgiwg0YLQviDQstC+0LfQstGA0LDRidCw0LXRgiB1bmRlZmluZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW1nSW5kZXgg0JjQvdC00LXQutGBINC40LfQvtCx0YDQsNC20LXQvdC40Y8g0LIg0LzQsNGB0YHQuNCy0LUuXG4gICAgICovXG4gICAgcHVibGljIGdldEltYWdlKGltZ0luZGV4OiBudW1iZXIgPSAwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzPy5bYCR7aW1nSW5kZXh9YF0uaW1hZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/QtdGA0LLQvtC1INC/0YDQtdCy0YzRji3QuNC30L7QsdGA0LDQttC10L3QuNC1INGC0L7QstCw0YDQsC4g0JXRgdC70Lgg0L/RgNC10LLRjNGOLdC40LfQvtCx0YDQsNC20LXQvdC40Lkg0L3QtdGCLCDRgtC+INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCIHVuZGVmaW5lZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbWdJbmRleCDQmNC90LTQtdC60YEg0L/RgNC10LLRjNGOLdC40LfQvtCx0YDQsNC20LXQvdC40Y8g0LIg0LzQsNGB0YHQuNCy0LUuXG4gICAgICovXG4gICAgcHVibGljIGdldEltYWdlUHJldmlldyhpbWdJbmRleDogbnVtYmVyID0gMCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlcz8uW2Ake2ltZ0luZGV4fWBdLnByZXZpZXc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwINC90LAg0YHQutC70LDQtNC1ICjQvtGB0YLQsNGC0L7QuikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2FyZWhvdXNlSWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YHQutC70LDQtNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRXYXJlaG91c2VTdG9ja0NvdW50KHdhcmVob3VzZUlkOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9ja0NvdW50Py5maW5kKChzYykgPT4gc2Mud2FyZWhvdXNlSWQgPT09IHdhcmVob3VzZUlkKT8uY291bnQgPz8gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9GA0LjQt9C90LDQuiwg0YfRgtC+INC40LzQtdC10YLRgdGPINC+0YHRgtCw0YLQvtC6INGC0L7QstCw0YDQsCDQvdCwINGB0LrQu9Cw0LTQtS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3YXJlaG91c2VJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHVibGljIGlzV2FyZWhvdXNlU3RvY2tFeGlzdCh3YXJlaG91c2VJZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5vbk9yZGVyICYmIHRoaXMuc3RvY2tDb3VudD8uZmluZCgoc2MpID0+IHNjLndhcmVob3VzZUlkID09PSB3YXJlaG91c2VJZCkgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7QsdGJ0LXQvdC40LUg0L7QsSDQvtGC0YHRg9GC0YHRgtCy0LjQuCDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gd2FyZWhvdXNlINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Tm90U3RvY2tNZXNzYWdlKHdhcmVob3VzZTogU2NJV2FyZWhvdXNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHRoaXMub25PcmRlciA/PyB0aGlzLmlzV2FyZWhvdXNlU3RvY2tFeGlzdCh3YXJlaG91c2UuaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGxhbmluZ0RhdGUgPSB0aGlzLnByb3BlcnRpZXM/LnBsYW5pbmdJbmNvbWluZ0RhdGUgPz8gdGhpcy5wcm9wZXJ0aWVzPy5wbGFuaW5nUHJvZHVjdGlvbkRhdGU7XG5cbiAgICAgICAgaWYgKCF3YXJlaG91c2UuaXNNYWluIHx8IHBsYW5pbmdEYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAn0KDQsNGB0LrRg9C/0LjQu9C4JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFzc2lnbm1lbnQsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgIGNvbnN0IGRheXNEaWZmID0gVHVpRGF5Lmxlbmd0aEJldHdlZW4oVHVpRGF5LmN1cnJlbnRMb2NhbCgpLCBUdWlEYXkubm9ybWFsaXplUGFyc2UocGxhbmluZ0RhdGUsICdETVknKSk7XG5cbiAgICAgICAgc3dpdGNoIChkYXlzRGlmZikge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHJldHVybiAn0JHRg9C00LXRgiDRgdC10LPQvtC00L3Rjyc7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQkdGD0LTQtdGCINC30LDQstGC0YDQsCc7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQkdGD0LTQtdGCINC/0L7RgdC70LXQt9Cw0LLRgtGA0LAnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYNCe0LbQuNC00LDQtdGC0YHRjyAke3BsYW5pbmdEYXRlfWA7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtcHJvZHVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY2F0YWxvZy9kdG8vc2MtcHJvZHVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT3ZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVUsU0FBUSxhQUFhO0lBdUp4Qzs7Ozs7T0FLRztJQUNILFlBQW1CLFVBQWdDLEVBQUUsTUFBYyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQS9DdEI7O1dBRUc7UUFDSSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBT2pDOztXQUVHO1FBQ0ksV0FBTSxHQUFZLEtBQUssQ0FBQztRQU8vQjs7V0FFRztRQUNJLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBT3ZDOztXQUVHO1FBQ0ksd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBZ0J4QyxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQ2xDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FB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LENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQztRQUVuRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztRQUVELGtKQUFrSjtRQUNsSixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhHLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDZixLQUFLLENBQUM7Z0JBQ0YsT0FBTyxlQUFlLENBQUM7WUFDM0IsS0FBSyxDQUFDO2dCQUNGLE9BQU8sY0FBYyxDQUFDO1lBQzFCLEtBQUssQ0FBQztnQkFDRixPQUFPLG1CQUFtQixDQUFDO1lBQy9CO2dCQUNJLE9BQU8sYUFBYSxXQUFXLEVBQUUsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHVpRGF5IH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5cbmltcG9ydCB7IFNjQ2FydEl0ZW0gfSBmcm9tICcuLi8uLi9jYXJ0L2R0by9zYy1jYXJ0LWl0ZW0nO1xuaW1wb3J0IHsgU2NJV2FyZWhvdXNlU3RvY2tDb3VudCB9IGZyb20gJy4uLy4uL3dhcmVob3VzZS9kdG8vc2MtaS13YXJlaG91c2Utc3RvY2stY291bnQnO1xuaW1wb3J0IHsgU2NJV2FyZWhvdXNlIH0gZnJvbSAnLi4vLi4vd2FyZWhvdXNlL2R0by9zYy13YXJlaG91c2UnO1xuaW1wb3J0IHsgU2NJUHJvZHVjdERUTyB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktcHJvZHVjdC1kdG8nO1xuaW1wb3J0IHsgU2NQcmljZUhpc3RvcnkgfSBmcm9tICcuLi90eXBlcy9zYy1wcmljZS1oaXN0b3J5JztcbmltcG9ydCB7IFNjQ2F0ZWdvcnkgfSBmcm9tICcuL3NjLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSURpc2NvdW50IH0gZnJvbSAnLi9zYy1pLWRpc2NvdW50JztcbmltcG9ydCB7IFNjSVByb2R1Y3RJbWFnZXMgfSBmcm9tICcuL3NjLWktcHJvZHVjdC1pbWFnZXMnO1xuaW1wb3J0IHsgU2NJUHJvcGVydGllcyB9IGZyb20gJy4vc2MtaS1wcm9wZXJ0aWVzJztcbmltcG9ydCB7IFNjU2VvUmVzb3VyY2UgfSBmcm9tICcuL3NjLXNlby1yZXNvdXJjZSc7XG5cbi8qKlxuICog0JzQvtC00LXQu9GMINC00LDQvdC90YvRhSDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICovXG5leHBvcnQgY2xhc3MgU2NQcm9kdWN0IGV4dGVuZHMgU2NTZW9SZXNvdXJjZSBpbXBsZW1lbnRzIFNjSVByb2R1Y3REVE8ge1xuICAgIC8qKlxuICAgICAqINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGC0L7QstCw0YDQsC/Rg9GB0LvRg9Cz0LguXG4gICAgICovXG4gICAgcHVibGljIGlkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHVibGljIHNsdWc6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCQ0YDRgtC40LrRg9C7LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb2RlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0LfQstCw0L3QuNC1INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINCy0LDQu9GO0YLQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29zdD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqINCh0YLQvtC40LzQvtGB0YLRjCDRgtC+0LLQsNGA0LAg0LjQu9C4INGD0YHQu9GD0LPQuCDQsiDRgNGD0LHQu9GP0YUuXG4gICAgICovXG4gICAgcHVibGljIGNvc3RSdWI/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0YLQsCDRg9GB0YLQsNC90L7QstC60Lgg0YbQtdC90YsuXG4gICAgICovXG4gICAgcHVibGljIGNvc3REYXRlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JLQsNC70Y7RgtCwINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIHB1YmxpYyBjdXJyZW5jeTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JXQtNC40L3QuNGG0LAg0LjQt9C80LXRgNC10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyB1bml0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQldC00LjQvdC40YbQsCDQuNC30LzQtdGA0LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBxdWFudGl0eVVuaXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCc0LjQvdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwINC00LvRjyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHVibGljIG1pbkNvdW50PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INC60L7Qu9C40YfQtdGB0YLQstC+INGC0L7QstCw0YDQsCwg0LTQvtGB0YLRg9C/0L3QvtC8INC90LAg0YHQutC70LDQtNCw0YUuXG4gICAgICovXG4gICAgcHVibGljIHN0b2NrQ291bnQ/OiBTY0lXYXJlaG91c2VTdG9ja0NvdW50W107XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LLQsNGA0LAgXCLQn9C+0LQg0LfQsNC60LDQt1wiLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbk9yZGVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCd0L7RgNC80LAg0YPQv9Cw0LrQvtCy0LrQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFjaz86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YLQvtCy0LDRgCwg0YPRgdC70YPQs9CwINC40LvQuCDQutCw0YLQtdCz0L7RgNC40Y8g0Y/QstC70Y/RjtGC0YHRjyDQuNC30LHRgNCw0L3QvdGL0LzQuCDQtNC70Y8g0LrQu9C40LXQvdGC0LAuXG4gICAgICovXG4gICAgcHVibGljIGlzRmF2b3JpdGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGC0L7QstCw0YAg0LjQu9C4INGD0YHQu9GD0LPQsCwg0LHRi9C7INGA0LDQvdC10LUg0LfQsNC60LDQt9Cw0L0uXG4gICAgICovXG4gICAgcHVibGljIGlzUHJldmlvdXNseU9yZGVyZWQ/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INC40LfQvtCx0YDQsNC20LXQvdC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGltYWdlcz86IHJlYWRvbmx5IFNjSVByb2R1Y3RJbWFnZXNbXTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQutCw0YLQtdCz0L7RgNC40Lkg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjYXRlZ29yaWVzOiBTY0NhdGVnb3J5W107XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHQstC+0LnRgdGC0LIuINCn0LjRgdC70L4g0YHQstC+0LnRgdGC0LIg0LIg0L7QsdGK0LXQutGC0LUg0L3QtSDQvtCz0YDQsNC90LjRh9C10L3Qvi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJvcGVydGllcz86IFNjSVByb3BlcnRpZXM7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQu9C40LXQvdGC0YHQutC+0Lkg0YHQutC40LTQutC1LlxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNjb3VudD86IFNjSURpc2NvdW50O1xuXG4gICAgLyoqXG4gICAgICog0KDQvtC00LjRgtC10LvRjNGB0LrQsNGPINC60LDRgtC10LPQvtGA0LjRjywg0LIg0LrQvtGC0L7RgNC+0Lkg0L3QsNGF0L7QtNC40YLRgdGPINGC0L7QstCw0YAg0LjQu9C4INGD0YHQu9GD0LPQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFyZW50Q2F0ZWdvcnk/OiBTY0NhdGVnb3J5O1xuXG4gICAgLyoqXG4gICAgICog0J7RgdC90L7QstC90LDRjyDQutCw0YLQtdCz0L7RgNC40Y8g0LTQu9GPINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmltYXJ5Q2F0ZWdvcnk/OiBTY0NhdGVnb3J5O1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0L3QsNC70LjRh9C40Y8g0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDRgyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHVibGljIGhhc0ltYWdlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIg0Y3Qu9C10LzQtdC90YLQsCDQutC+0YDQt9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2FydEl0ZW0/OiBTY0NhcnRJdGVtO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgtC+0LLQsNGAINC+0YLRgdGD0YLRgdGC0LLRg9C10YIuXG4gICAgICovXG4gICAgcHVibGljIGlzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtGA0Y/QtNC+0Log0YHQu9C10LTQvtCy0LDQvdC40Y8g0YLQvtCy0LDRgNCwINCyINGB0L/QuNGB0LrQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3JkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INGC0L7QstCw0YAg0YHQutGA0YvQu9C4INGE0LjQu9GM0YLRgNC+0LwuXG4gICAgICovXG4gICAgcHVibGljIGlzSGlkZGVuRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQmNGB0YLQvtGA0LjRjyDQuNC30LzQtdC90LXQvdC40Y8g0YbQtdC90Ysg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0LguXG4gICAgICovXG4gICAgcHVibGljIHByaWNlSGlzdG9yeT86IFNjUHJpY2VIaXN0b3J5O1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0L3QtdC+0LHRhdC+0LTQuNC80L7RgdGC0Lgg0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC/0YDQvtCy0LXRgNC60YMg0LzQuNC90LjQvNCw0LvRjNC90L7Qs9C+INC60L7Qu9C40YfQtdGB0YLQstCwINC4INC60YDQsNGC0L3QvtGB0YLQuCDQv9GA0Lgg0LTQvtCx0LDQstC70LXQvdC40Lgg0YLQvtCy0LDRgNCwINCyINC60L7RgNC30LjQvdGDINC4INGB0L7Qt9C00LDQvdC40Lgg0LfQsNC60LDQt9CwLlxuICAgICAqL1xuICAgIHB1YmxpYyBpZ25vcmVNaW5Db3VudENoZWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC/0YDQvtC00YPQutGCINGP0LLQu9GP0LXRgtGB0Y8g0YHQutGA0YvRgtGL0LwuXG4gICAgICovXG4gICAgcHVibGljIGlzSGlkZGVuPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCY0L3QuNGG0LjQsNC70LjQt9C40YDRg9C10YIg0Y3QutC30LXQvNC/0LvRj9GAINC60LvQsNGB0YHQsCB7QGxpbmsgU2NQcm9kdWN0fS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0RFRPINCU0LDQvdC90YvQtSDQviDQv9GA0L7QtNGD0LrRgtC1LlxuICAgICAqIEBwYXJhbSBvcmQg0J/QvtGA0Y/QtNC+0Log0YHQu9C10LTQvtCy0LDQvdC40Y8g0L/RgNC+0LTRg9C60YLQsCDQsiDRgdC/0LjRgdC60LUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByb2R1Y3REVE86IFNjSVByb2R1Y3REVE8gfCBudWxsLCBvcmQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgc3VwZXIocHJvZHVjdERUTyk7XG5cbiAgICAgICAgaWYgKHByb2R1Y3REVE8gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNOdWxsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9ICfQotC+0LLQsNGAINC90LUg0L3QsNC50LTQtdC9JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBwcm9kdWN0RFRPLmlkO1xuICAgICAgICAgICAgdGhpcy5zbHVnID0gcHJvZHVjdERUTy5zbHVnO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gcHJvZHVjdERUTy5uYW1lO1xuICAgICAgICAgICAgdGhpcy5jb3N0ID0gcHJvZHVjdERUTy5jb3N0O1xuICAgICAgICAgICAgdGhpcy5jb3N0UnViID0gcHJvZHVjdERUTy5jb3N0UnViO1xuICAgICAgICAgICAgdGhpcy5jb3N0RGF0ZSA9IHByb2R1Y3REVE8uY29zdERhdGU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbmN5ID0gcHJvZHVjdERUTy5jdXJyZW5jeTtcbiAgICAgICAgICAgIHRoaXMuY29kZSA9IHByb2R1Y3REVE8uY29kZTtcbiAgICAgICAgICAgIHRoaXMudW5pdCA9IHByb2R1Y3REVE8udW5pdDtcbiAgICAgICAgICAgIHRoaXMucXVhbnRpdHlVbml0ID0gcHJvZHVjdERUTy5xdWFudGl0eVVuaXQ7XG4gICAgICAgICAgICB0aGlzLm1pbkNvdW50ID0gcHJvZHVjdERUTy5taW5Db3VudDtcbiAgICAgICAgICAgIHRoaXMuc3RvY2tDb3VudCA9IHByb2R1Y3REVE8uc3RvY2tDb3VudDtcbiAgICAgICAgICAgIHRoaXMub25PcmRlciA9IHByb2R1Y3REVE8ub25PcmRlcjtcbiAgICAgICAgICAgIHRoaXMucGFjayA9IHByb2R1Y3REVE8ucGFjaztcbiAgICAgICAgICAgIHRoaXMuaXNGYXZvcml0ZSA9IEJvb2xlYW4ocHJvZHVjdERUTy5pc0Zhdm9yaXRlKTtcbiAgICAgICAgICAgIHRoaXMuaXNQcmV2aW91c2x5T3JkZXJlZCA9IHByb2R1Y3REVE8uaXNQcmV2aW91c2x5T3JkZXJlZDtcbiAgICAgICAgICAgIHRoaXMuaGFzSW1hZ2UgPSAocHJvZHVjdERUTy5pbWFnZXMgJiYgcHJvZHVjdERUTy5pbWFnZXMubGVuZ3RoID4gMCkgPz8gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmltYWdlcyA9IHByb2R1Y3REVE8uaW1hZ2VzPy5zbGljZSgpLnNvcnQoKGltZzEsIGltZzIpID0+IE51bWJlcihpbWcyLmlzRGVmYXVsdCkgLSBOdW1iZXIoaW1nMS5pc0RlZmF1bHQpKTtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcyA9IHByb2R1Y3REVE8uY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBuZXcgU2NDYXRlZ29yeShjYXRlZ29yeSkpO1xuICAgICAgICAgICAgdGhpcy5wcmltYXJ5Q2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pc1ByaW1hcnkpO1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVNaW5Db3VudENoZWNrID0gcHJvZHVjdERUTy5wcm9wZXJ0aWVzPy5pZ25vcmVNaW5Db3VudENoZWNrID8/IHRoaXMucHJvcGVydGllcz8uaWdub3JlTWluQ291bnRDaGVjayA/PyB0aGlzLmlnbm9yZU1pbkNvdW50Q2hlY2s7XG4gICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9kdWN0RFRPLnByb3BlcnRpZXM7XG4gICAgICAgICAgICB0aGlzLmRpc2NvdW50ID0gcHJvZHVjdERUTy5kaXNjb3VudDtcbiAgICAgICAgICAgIHRoaXMub3JkID0gb3JkO1xuICAgICAgICAgICAgdGhpcy5pc0hpZGRlbiA9IHByb2R1Y3REVE8uaXNIaWRkZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodGC0L7QuNC80L7RgdGC0Ywg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0Lgg0YEg0LLQsNC70Y7RgtC+0Lkg0Lgg0LXQtNC40L3QuNGG0LXQuSDQuNC30LzQtdGA0LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGdldCBjb3N0U3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvc3QgPyBgJHt0aGlzLmNvc3QudG9Mb2NhbGVTdHJpbmcoKX0gJHt0aGlzLmN1cnJlbmN5fSAvICR7dGhpcy51bml0fWAgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodGC0L7QuNC80L7RgdGC0Ywg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0Lgg0LIg0YDRg9Cx0LvRj9GFINC4INGBINC10LTQuNC90LjRhtC10Lkg0LjQt9C80LXRgNC10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29zdFJ1YlN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3N0UnViID8gYCR7dGhpcy5jb3N0UnViLnRvTG9jYWxlU3RyaW5nKCl9IOKCvSAvICR7dGhpcy51bml0fWAgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodGC0L7QuNC80L7RgdGC0Ywg0YLQvtCy0LDRgNCwINC40LvQuCDRg9GB0LvRg9Cz0Lgg0YEg0LLQsNC70Y7RgtC+0Lkg0Lgg0LXQtNC40L3QuNGG0LXQuSDQuNC30LzQtdGA0LXQvdC40Y8g0LTQviDQv9GA0LjQvNC10L3QtdC90LjRjyDRgdC60LjQtNC60LguXG4gICAgICovXG4gICAgcHVibGljIGdldCBkaXNjb3VudENvc3RTdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzY291bnQ/Lm9sZENvc3QgPyBgJHt0aGlzLmRpc2NvdW50Lm9sZENvc3QudG9Mb2NhbGVTdHJpbmcoKX0gJHt0aGlzLmN1cnJlbmN5fSAvICR7dGhpcy51bml0fWAgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGC0L7QstCw0YAg0L/RgNC+0LTQsNGR0YLRgdGPINCyINGA0YPQsdC70Y/RhS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHByaWNlSW5SdWIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbmN5ID09PSAn4oK9JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9C10YDQstC+0LUg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSDRgtC+0LLQsNGA0LAuINCV0YHQu9C4INC40LfQvtCx0YDQsNC20LXQvdC40Lkg0L3QtdGCLCDRgtC+INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCIHVuZGVmaW5lZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbWdJbmRleCDQmNC90LTQtdC60YEg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQsiDQvNCw0YHRgdC40LLQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW1hZ2UoaW1nSW5kZXg6IG51bWJlciA9IDApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXM/LltgJHtpbWdJbmRleH1gXS5pbWFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9C10YDQstC+0LUg0L/RgNC10LLRjNGOLdC40LfQvtCx0YDQsNC20LXQvdC40LUg0YLQvtCy0LDRgNCwLiDQldGB0LvQuCDQv9GA0LXQstGM0Y4t0LjQt9C+0LHRgNCw0LbQtdC90LjQuSDQvdC10YIsINGC0L4g0LLQvtC30LLRgNCw0YnQsNC10YIgdW5kZWZpbmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGltZ0luZGV4INCY0L3QtNC10LrRgSDQv9GA0LXQstGM0Y4t0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQsiDQvNCw0YHRgdC40LLQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW1hZ2VQcmV2aWV3KGltZ0luZGV4OiBudW1iZXIgPSAwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzPy5bYCR7aW1nSW5kZXh9YF0ucHJldmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0LAg0L3QsCDRgdC60LvQsNC00LUgKNC+0YHRgtCw0YLQvtC6KS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3YXJlaG91c2VJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgdC60LvQsNC00LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFdhcmVob3VzZVN0b2NrQ291bnQod2FyZWhvdXNlSWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b2NrQ291bnQ/LmZpbmQoKHNjKSA9PiBzYy53YXJlaG91c2VJZCA9PT0gd2FyZWhvdXNlSWQpPy5jb3VudCA/PyAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6LCDRh9GC0L4g0LjQvNC10LXRgtGB0Y8g0L7RgdGC0LDRgtC+0Log0YLQvtCy0LDRgNCwINC90LAg0YHQutC70LDQtNC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHdhcmVob3VzZUlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0LrQu9Cw0LTQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNXYXJlaG91c2VTdG9ja0V4aXN0KHdhcmVob3VzZUlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm9uT3JkZXIgJiYgdGhpcy5zdG9ja0NvdW50Py5maW5kKChzYykgPT4gc2Mud2FyZWhvdXNlSWQgPT09IHdhcmVob3VzZUlkKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L7QvtCx0YnQtdC90LjQtSDQvtCxINC+0YLRgdGD0YLRgdGC0LLQuNC4INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3YXJlaG91c2Ug0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YHQutC70LDQtNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROb3RTdG9ja01lc3NhZ2Uod2FyZWhvdXNlOiBTY0lXYXJlaG91c2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodGhpcy5vbk9yZGVyID8/IHRoaXMuaXNXYXJlaG91c2VTdG9ja0V4aXN0KHdhcmVob3VzZS5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwbGFuaW5nRGF0ZSA9IHRoaXMucHJvcGVydGllcz8ucGxhbmluZ0luY29taW5nRGF0ZSA/PyB0aGlzLnByb3BlcnRpZXM/LnBsYW5pbmdQcm9kdWN0aW9uRGF0ZTtcblxuICAgICAgICBpZiAoIXdhcmVob3VzZS5pc01haW4gfHwgcGxhbmluZ0RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuICfQoNCw0YHQutGD0L/QuNC70LgnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudCwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgY29uc3QgZGF5c0RpZmYgPSBUdWlEYXkubGVuZ3RoQmV0d2VlbihUdWlEYXkuY3VycmVudExvY2FsKCksIFR1aURheS5ub3JtYWxpemVQYXJzZShwbGFuaW5nRGF0ZSwgJ0RNWScpKTtcblxuICAgICAgICBzd2l0Y2ggKGRheXNEaWZmKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQkdGD0LTQtdGCINGB0LXQs9C+0LTQvdGPJztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9CR0YPQtNC10YIg0LfQsNCy0YLRgNCwJztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9CR0YPQtNC10YIg0L/QvtGB0LvQtdC30LDQstGC0YDQsCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBg0J7QttC40LTQsNC10YLRgdGPICR7cGxhbmluZ0RhdGV9YDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1wcm9kdWN0LWR0by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY2F0YWxvZy9pbnRlcm5hbC9zYy1pLXByb2R1Y3QtZHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBUT0RPOiDQktGL0L3QtdGB0YLQuCDQsiBpbnRlcm5hbCDQv9C+0YHQu9C1INC/0LXRgNC10L3QvtGB0LAg0LIg0LHQuNCx0LvQuNC+0YLQtdC60YMgQ2F0YWxvZ1NlcnZpY2UgLSBUQVNLWyM2NDMzXSwgQ29uZmlndXJhdG9yU2VydmljZSAtIFRBU0tbIzY0MzRdLCBGYXZvcml0ZVNlcnZpY2UgLSBUQVNLWyM2NDM1XSAqL1xuaW1wb3J0IHsgU2NJV2FyZWhvdXNlU3RvY2tDb3VudCB9IGZyb20gJy4uLy4uL3dhcmVob3VzZS9kdG8vc2MtaS13YXJlaG91c2Utc3RvY2stY291bnQnO1xuaW1wb3J0IHsgU2NJRGlzY291bnQgfSBmcm9tICcuLi9kdG8vc2MtaS1kaXNjb3VudCc7XG5pbXBvcnQgeyBTY0lQcm9kdWN0SW1hZ2VzIH0gZnJvbSAnLi4vZHRvL3NjLWktcHJvZHVjdC1pbWFnZXMnO1xuaW1wb3J0IHsgU2NJUHJvcGVydGllcyB9IGZyb20gJy4uL2R0by9zYy1pLXByb3BlcnRpZXMnO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnlEVE8gfSBmcm9tICcuL3NjLWktY2F0ZWdvcnktZHRvJztcbmltcG9ydCB7IFNjSVNlb1Jlc291cmNlRFRPIH0gZnJvbSAnLi9zYy1pLXNlby1yZXNvdXJjZS1kdG8nO1xuXG4vKipcbiAqINCc0L7QtNC10LvRjCDQtNCw0L3QvdGL0YUg0LTQu9GPINGC0L7QstCw0YDQvtCyINC60LDRgtCw0LvQvtCz0LAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJUHJvZHVjdERUTyBleHRlbmRzIFNjSVNlb1Jlc291cmNlRFRPIHtcbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgc2x1Zzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JDRgNGC0LjQutGD0LsuXG4gICAgICovXG4gICAgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNC30LLQsNC90LjQtSDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINCy0LDQu9GO0YLQtS5cbiAgICAgKi9cbiAgICBjb3N0PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINGA0YPQsdC70Y/RhS5cbiAgICAgKi9cbiAgICBjb3N0UnViPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNGC0LAg0YPRgdGC0LDQvdC+0LLQutC4INGG0LXQvdGLLlxuICAgICAqL1xuICAgIGNvc3REYXRlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JLQsNC70Y7RgtCwINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIGN1cnJlbmN5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQldC00LjQvdC40YbQsCDQuNC30LzQtdGA0LXQvdC40Y8uXG4gICAgICovXG4gICAgdW5pdDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JXQtNC40L3QuNGG0LAg0LjQt9C80LXRgNC10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBxdWFudGl0eVVuaXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCc0LjQvdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwINC00LvRjyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgbWluQ291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLCDQtNC+0YHRgtGD0L/QvdC+0Lwg0L3QsCDRgdC60LvQsNC00LDRhS5cbiAgICAgKi9cbiAgICBzdG9ja0NvdW50PzogU2NJV2FyZWhvdXNlU3RvY2tDb3VudFtdO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCy0LDRgNCwIFwi0J/QvtC0INC30LDQutCw0LdcIi5cbiAgICAgKi9cbiAgICBvbk9yZGVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCd0L7RgNC80LAg0YPQv9Cw0LrQvtCy0LrQuC5cbiAgICAgKi9cbiAgICBwYWNrPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgtC+0LLQsNGALCDRg9GB0LvRg9Cz0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjRjyDRj9Cy0LvRj9GO0YLRgdGPINC40LfQsdGA0LDQvdC90YvQvNC4INC00LvRjyDQutC70LjQtdC90YLQsC5cbiAgICAgKi9cbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YLQvtCy0LDRgCDQuNC70Lgg0YPRgdC70YPQs9CwLCDQsdGL0Lsg0YDQsNC90LXQtSDQt9Cw0LrQsNC30LDQvS5cbiAgICAgKi9cbiAgICBpc1ByZXZpb3VzbHlPcmRlcmVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQuNC30L7QsdGA0LDQttC10L3QuNC5LlxuICAgICAqL1xuICAgIGltYWdlcz86IHJlYWRvbmx5IFNjSVByb2R1Y3RJbWFnZXNbXTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQutCw0YLQtdCz0L7RgNC40Lkg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIGNhdGVnb3JpZXM6IFNjSUNhdGVnb3J5RFRPW107XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHQstC+0LnRgdGC0LIuINCn0LjRgdC70L4g0YHQstC+0LnRgdGC0LIg0LIg0L7QsdGK0LXQutGC0LUg0L3QtSDQvtCz0YDQsNC90LjRh9C10L3Qvi5cbiAgICAgKi9cbiAgICBwcm9wZXJ0aWVzPzogU2NJUHJvcGVydGllcztcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDQutC70LjQtdC90YLRgdC60L7QuSDRgdC60LjQtNC60LUuXG4gICAgICovXG4gICAgZGlzY291bnQ/OiBTY0lEaXNjb3VudDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaS1wcm9kdWN0LWR0by5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY2F0YWxvZy9pbnRlcm5hbC9zYy1pLXByb2R1Y3QtZHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBUT0RPOiDQktGL0L3QtdGB0YLQuCDQsiBpbnRlcm5hbCDQv9C+0YHQu9C1INC/0LXRgNC10L3QvtGB0LAg0LIg0LHQuNCx0LvQuNC+0YLQtdC60YMgQ2F0YWxvZ1NlcnZpY2UgLSBUQVNLWyM2NDMzXSwgQ29uZmlndXJhdG9yU2VydmljZSAtIFRBU0tbIzY0MzRdLCBGYXZvcml0ZVNlcnZpY2UgLSBUQVNLWyM2NDM1XSAqL1xuaW1wb3J0IHsgU2NJV2FyZWhvdXNlU3RvY2tDb3VudCB9IGZyb20gJy4uLy4uL3dhcmVob3VzZS9kdG8vc2MtaS13YXJlaG91c2Utc3RvY2stY291bnQnO1xuaW1wb3J0IHsgU2NJRGlzY291bnQgfSBmcm9tICcuLi9kdG8vc2MtaS1kaXNjb3VudCc7XG5pbXBvcnQgeyBTY0lQcm9kdWN0SW1hZ2VzIH0gZnJvbSAnLi4vZHRvL3NjLWktcHJvZHVjdC1pbWFnZXMnO1xuaW1wb3J0IHsgU2NJUHJvcGVydGllcyB9IGZyb20gJy4uL2R0by9zYy1pLXByb3BlcnRpZXMnO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnlEVE8gfSBmcm9tICcuL3NjLWktY2F0ZWdvcnktZHRvJztcbmltcG9ydCB7IFNjSVNlb1Jlc291cmNlRFRPIH0gZnJvbSAnLi9zYy1pLXNlby1yZXNvdXJjZS1kdG8nO1xuXG4vKipcbiAqINCc0L7QtNC10LvRjCDQtNCw0L3QvdGL0YUg0LTQu9GPINGC0L7QstCw0YDQvtCyINC60LDRgtCw0LvQvtCz0LAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NJUHJvZHVjdERUTyBleHRlbmRzIFNjSVNlb1Jlc291cmNlRFRPIHtcbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIGlkOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgc2x1Zzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JDRgNGC0LjQutGD0LsuXG4gICAgICovXG4gICAgY29kZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNC30LLQsNC90LjQtSDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgbmFtZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINCy0LDQu9GO0YLQtS5cbiAgICAgKi9cbiAgICBjb3N0PzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0KHRgtC+0LjQvNC+0YHRgtGMINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4INCyINGA0YPQsdC70Y/RhS5cbiAgICAgKi9cbiAgICBjb3N0UnViPzogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICog0JTQsNGC0LAg0YPRgdGC0LDQvdC+0LLQutC4INGG0LXQvdGLLlxuICAgICAqL1xuICAgIGNvc3REYXRlPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JLQsNC70Y7RgtCwINGC0L7QstCw0YDQsCDQuNC70Lgg0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIGN1cnJlbmN5OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiDQldC00LjQvdC40YbQsCDQuNC30LzQtdGA0LXQvdC40Y8uXG4gICAgICovXG4gICAgdW5pdDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0JXQtNC40L3QuNGG0LAg0LjQt9C80LXRgNC10L3QuNGPINC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBxdWFudGl0eVVuaXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqINCc0LjQvdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwINC00LvRjyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgbWluQ291bnQ/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLCDQtNC+0YHRgtGD0L/QvdC+0Lwg0L3QsCDRgdC60LvQsNC00LDRhS5cbiAgICAgKi9cbiAgICBzdG9ja0NvdW50PzogU2NJV2FyZWhvdXNlU3RvY2tDb3VudFtdO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0YLQvtCy0LDRgNCwIFwi0J/QvtC0INC30LDQutCw0LdcIi5cbiAgICAgKi9cbiAgICBvbk9yZGVyPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCd0L7RgNC80LAg0YPQv9Cw0LrQvtCy0LrQuC5cbiAgICAgKi9cbiAgICBwYWNrPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDRgtC+0LLQsNGALCDRg9GB0LvRg9Cz0LAg0LjQu9C4INC60LDRgtC10LPQvtGA0LjRjyDRj9Cy0LvRj9GO0YLRgdGPINC40LfQsdGA0LDQvdC90YvQvNC4INC00LvRjyDQutC70LjQtdC90YLQsC5cbiAgICAgKi9cbiAgICBpc0Zhdm9yaXRlPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YLQvtCy0LDRgCDQuNC70Lgg0YPRgdC70YPQs9CwLCDQsdGL0Lsg0YDQsNC90LXQtSDQt9Cw0LrQsNC30LDQvS5cbiAgICAgKi9cbiAgICBpc1ByZXZpb3VzbHlPcmRlcmVkPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQuNC30L7QsdGA0LDQttC10L3QuNC5LlxuICAgICAqL1xuICAgIGltYWdlcz86IHJlYWRvbmx5IFNjSVByb2R1Y3RJbWFnZXNbXTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQutCw0YLQtdCz0L7RgNC40Lkg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIGNhdGVnb3JpZXM6IFNjSUNhdGVnb3J5RFRPW107XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHQstC+0LnRgdGC0LIuINCn0LjRgdC70L4g0YHQstC+0LnRgdGC0LIg0LIg0L7QsdGK0LXQutGC0LUg0L3QtSDQvtCz0YDQsNC90LjRh9C10L3Qvi5cbiAgICAgKi9cbiAgICBwcm9wZXJ0aWVzPzogU2NJUHJvcGVydGllcztcblxuICAgIC8qKlxuICAgICAqINCU0LDQvdC90YvQtSDQviDQutC70LjQtdC90YLRgdC60L7QuSDRgdC60LjQtNC60LUuXG4gICAgICovXG4gICAgZGlzY291bnQ/OiBTY0lEaXNjb3VudDtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INGC0L7Qs9C+LCDRh9GC0L4g0L/RgNC+0LTRg9C60YIg0Y/QstC70Y/QtdGC0YHRjyDRgdC60YDRi9GC0YvQvC5cbiAgICAgKi9cbiAgICBpc0hpZGRlbj86IGJvb2xlYW47XG59XG4iXX0=
@@ -64,18 +64,6 @@ export class ScCatalogService {
64
64
  * {@link Map} коллекция пар ключ-значение для кэшированных товаров категории каталога.
65
65
  */
66
66
  this.categoryProductsMap = new Map();
67
- /**
68
- * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров категории.
69
- *
70
- * @deprecated
71
- */
72
- this.recommendedProductsByCategoryMap = new Map();
73
- /**
74
- * {@link Map} коллекция пар ключ-значение для кэшированных рекомендуемых товаров товара.
75
- *
76
- * @deprecated
77
- */
78
- this.recommendedProductsByProductMap = new Map();
79
67
  /**
80
68
  * {@link Map} коллекция пар ключ-значение для кэширования истории цен.
81
69
  */
@@ -85,9 +73,13 @@ export class ScCatalogService {
85
73
  */
86
74
  this.idOrSlugPipe = inject(ScIdOrSlugPipe);
87
75
  /**
88
- * {@link Map} коллекция пар ключ-значение для сопоставления slug и id категорий при кеширование запросов, если идентификатор отличаться от установленного в проекте (slug/id).
76
+ * {@link Map} коллекция пар ключ-значение для сопоставления slug и id категорий при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).
89
77
  */
90
78
  this.categoryIdOrSlugMap = new Map();
79
+ /**
80
+ * {@link Map} коллекция пар ключ-значение для сопоставления slug и id товаров при кешировании запросов, если идентификатор отличается от установленного в проекте (slug/id).
81
+ */
82
+ this.productIdOrSlugMap = new Map();
91
83
  /**
92
84
  * Число первых записей товаров со скидкой.
93
85
  */
@@ -116,7 +108,6 @@ export class ScCatalogService {
116
108
  .subscribe(() => {
117
109
  this.idCategoryMap.clear();
118
110
  this.categoryMap.clear();
119
- this.productMap.clear();
120
111
  this.productHistoryMap.clear();
121
112
  });
122
113
  }
@@ -135,21 +126,6 @@ export class ScCatalogService {
135
126
  this.idCategoryMap.delete(categoryIdOrSlug?.toString());
136
127
  return undefined;
137
128
  }
138
- /**
139
- * Возвращает товар из коллекции каталога.
140
- *
141
- * @deprecated Удалить в рамках задачи TASK[#10153].
142
- *
143
- * @param productIdOrSlug Идентификатор или slug товара/услуги.
144
- */
145
- getProductFromMap(productIdOrSlug) {
146
- const product = this.productMap.get(productIdOrSlug.toString());
147
- if (product) {
148
- return product;
149
- }
150
- this.productMap.delete(productIdOrSlug.toString());
151
- return undefined;
152
- }
153
129
  /**
154
130
  * Создает запрос получения списка категорий товаров или список корневых категорий, если идентификатор категории не указан.
155
131
  *
@@ -299,12 +275,28 @@ export class ScCatalogService {
299
275
  *
300
276
  * @param productIdOrSlug Идентификатор или slug товара/услуги.
301
277
  */
302
- getProductInfo$(productIdOrSlug) {
303
- const productMap = this.productMap.get(productIdOrSlug.toString());
304
- if (productMap) {
305
- return of(productMap);
278
+ getProductData$(productIdOrSlug) {
279
+ return this.http.get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}`).pipe(map((productDTO) => new ScProduct(productDTO)), tap((product) => {
280
+ if (productIdOrSlug && typeof this.idOrSlugPipe.transform(product) !== typeof productIdOrSlug) {
281
+ this.productIdOrSlugMap.set(this.idOrSlugPipe.transform(product), productIdOrSlug);
282
+ }
283
+ }));
284
+ }
285
+ getProductDataCached$(productIdOrSlug) {
286
+ const valueFromMap = this.productIdOrSlugMap.get(productIdOrSlug);
287
+ if (valueFromMap) {
288
+ // eslint-disable-next-line no-param-reassign
289
+ productIdOrSlug = valueFromMap;
290
+ }
291
+ let cachedItem = this.productMap.get(productIdOrSlug.toString());
292
+ if (!cachedItem) {
293
+ cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.getProductData$(productIdOrSlug));
294
+ this.productMap.set(productIdOrSlug.toString(), cachedItem);
306
295
  }
307
- return this.http.get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}`).pipe(map((productDTO) => new ScProduct(productDTO)), tap((product) => this.productMap.set(product.id.toString(), product)));
296
+ if (!cachedItem.cachedDataIsActual()) {
297
+ cachedItem.update();
298
+ }
299
+ return cachedItem.item$;
308
300
  }
309
301
  /**
310
302
  * Создаёт запрос на получение генерируемого файла прайс-листа в формате {@link Blob}, и выгружает пользователю в браузер.
@@ -327,51 +319,6 @@ export class ScCatalogService {
327
319
  });
328
320
  }));
329
321
  }
330
- /**
331
- * Создает запрос получения списка ранее заказанных товаров.
332
- *
333
- * @deprecated Удалить в рамках задачи TASK[#10155].
334
- */
335
- getPreviouslyOrderedProducts$() {
336
- if (!this.currentUserPreviouslyOrdered.cachedDataIsActual()) {
337
- this.currentUserPreviouslyOrdered.update();
338
- }
339
- return this.currentUserPreviouslyOrdered.item$;
340
- }
341
- /**
342
- * Создает запрос на получение списка рекомендованных товаров для категории.
343
- *
344
- * @param categoryIdOrSlug Идентификатор или slug категории товаров.
345
- * @deprecated
346
- */
347
- getRecommendedProductsByCategory$(categoryIdOrSlug) {
348
- let cachedItem = this.recommendedProductsByCategoryMap.get(categoryIdOrSlug.toString());
349
- if (!cachedItem) {
350
- // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().
351
- cachedItem = new ScCachedItem(0, this.http
352
- .get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/recommendations`)
353
- .pipe(map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))));
354
- this.recommendedProductsByCategoryMap.set(categoryIdOrSlug.toString(), cachedItem);
355
- }
356
- return cachedItem.item$;
357
- }
358
- /**
359
- * Создает запрос на получение списка рекомендованных товаров для продукта.
360
- *
361
- * @param productIdOrSlug Идентификатор или slug товара/услуги.
362
- * @deprecated
363
- */
364
- getRecommendedProductsByProduct$(productIdOrSlug) {
365
- let cachedItem = this.recommendedProductsByProductMap.get(productIdOrSlug.toString());
366
- if (!cachedItem) {
367
- // Устанавливаем время жизни cachedItem равное, потому что нам не важно время жизни. Нам нужен функционал update().
368
- cachedItem = new ScCachedItem(0, this.http
369
- .get(`${this.urls.apiUrl}/catalog/products/${productIdOrSlug}/recommendations`)
370
- .pipe(map((productsDTO) => productsDTO.map((product) => new ScProduct(product)))));
371
- this.recommendedProductsByProductMap.set(productIdOrSlug.toString(), cachedItem);
372
- }
373
- return cachedItem.item$;
374
- }
375
322
  /**
376
323
  * Запрос на уведомление пользователя о поступлении продукта.
377
324
  *
@@ -396,4 +343,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
396
343
  type: Inject,
397
344
  args: [SC_CACHE_LIFETIME]
398
345
  }] }, { type: i5.ScUserMetrikaService }] });
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT2hKLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUtyRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw4Q0FB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TUFBTSxxQkFBcUIsZUFBZSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkgsQ0FBQzsrR0E3ZVEsZ0JBQWdCLDRDQWdIYixPQUFPLHdHQUlQLGlCQUFpQjttSEFwSHBCLGdCQUFnQixjQUZiLE1BQU07OzRGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQWlIUSxNQUFNOzJCQUFDLE9BQU87OzBCQUlkLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZVR5cGVzXG5cbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdHVpSXNQcmVzZW50IH0gZnJvbSAnQHRhaWdhLXVpL2Nkayc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBleHBhbmQsIGZpbHRlciwgZmlyc3QsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBza2lwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXAsIHRvQXJyYXkgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL2F1dGgvc2VydmljZXMvc2MtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjSUNhY2hlTGlmZXRpbWUgfSBmcm9tICcuLi8uLi9jb25maWcvc2MtaS1jYWNoZS1saWZldGltZSc7XG5pbXBvcnQgeyBTY0lVcmxzIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktdXJscyc7XG5pbXBvcnQgeyBTY0NvbnZlcnRlcnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udmVydGVycy9zZXJ2aWNlcy9zYy1jb252ZXJ0ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NJUGFnaW5hdGUgfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uL2R0by9zYy1pLXBhZ2luYXRlJztcbmltcG9ydCB7IFNjSWRPclNsdWdQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtaWQtb3Itc2x1Zy5waXBlJztcbmltcG9ydCB7IFNDX0NBQ0hFX0xJRkVUSU1FIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWNhY2hlLWxpZmV0aW1lJztcbmltcG9ydCB7IFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVF9IVFRQX0NPTlRFWFQgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtaXMtaGlkZGVuLWVycm9yLWFsZXJ0JztcbmltcG9ydCB7IFNDX1VSTFMgfSBmcm9tICcuLi8uLi90b2tlbnMvc2MtdXJscyc7XG5pbXBvcnQgeyBTY1VJU2VydmljZSB9IGZyb20gJy4uLy4uL3VpL3NlcnZpY2VzL3NjLXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSB9IGZyb20gJy4uLy4uL3VzZXItbWV0cmlrYS9lbnVtcy9zYy11c2VyLW1ldHJpa2EtZ29hbHMtZW51bSc7XG5pbXBvcnQgeyBTY1VzZXJNZXRyaWthU2VydmljZSB9IGZyb20gJy4uLy4uL3VzZXItbWV0cmlrYS9zZXJ2aWNlcy9zYy11c2VyLW1ldHJpa2Euc2VydmljZSc7XG5pbXBvcnQgeyBTY0NhY2hlZEl0ZW0gfSBmcm9tICcuLi9jbGFzc2VzJztcbmltcG9ydCB7IFNjQ2F0ZWdvcnkgfSBmcm9tICcuLi9kdG8vc2MtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJUHJvZHVjdE5vdGlmeVdoZW5JblN0b2NrIH0gZnJvbSAnLi4vZHRvL3NjLWktcHJvZHVjdC1ub3RpZnktd2hlbi1pbi1zdG9jayc7XG5pbXBvcnQgeyBTY1Byb2R1Y3QgfSBmcm9tICcuLi9kdG8vc2MtcHJvZHVjdCc7XG5pbXBvcnQgeyBTY1ZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uL2R0by9zYy12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjTWltZVR5cGVzIH0gZnJvbSAnLi4vZW51bXMvc2MtbWltZS10eXBlcyc7XG5pbXBvcnQgeyBTY0lDYXRlZ29yeVByb2R1Y3RQYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktY2F0ZWdvcnktcHJvZHVjdC1wYXJhbXMnO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnlQcm9kdWN0UGFnaW5hdGlvblBhcmFtcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtaS1jYXRlZ29yeS1wcm9kdWN0cy1wYWdpbmF0aW9uLXBhcmFtcyc7XG5pbXBvcnQgeyBTY0lDYXRlZ29yeURUTywgU2NJUHJvZHVjdERUTyB9IGZyb20gJy4uL2ludGVybmFsJztcbmltcG9ydCB7IFNjSVZpcnR1YWxDYXRlZ29yeURUTyB9IGZyb20gJy4uL2ludGVybmFsL3NjLWktdmlydHVhbC1jYXRlZ29yeS1kdG8nO1xuaW1wb3J0IHsgU0NfQ09VTlRfRklSU1RfRElTQ09VTlRFRF9QUk9EVUNUUyB9IGZyb20gJy4uL3Rva2Vucy9zYy1jb3VudC1maXJzdC1kaXNjb3VudGVkLXByb2R1Y3RzJztcbmltcG9ydCB7IFNjUHJpY2VIaXN0b3J5IH0gZnJvbSAnLi4vdHlwZXMvc2MtcHJpY2UtaGlzdG9yeSc7XG5cbi8qKlxuICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LrQsNGC0LDQu9C+0LPQvtC8LlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhdGFsb2dTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60LDRgtC10LPQvtGA0LjQuSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlkQ2F0ZWdvcnlNYXA6IE1hcDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQsIFNjQ2F0ZWdvcnk+ID0gbmV3IE1hcDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQsIFNjQ2F0ZWdvcnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINCy0LjRgNGC0YPQsNC70YzQvdGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgdmlydHVhbENhdGVnb3J5TWFwOiBNYXA8c3RyaW5nLCBTY0NhY2hlZEl0ZW08U2NWaXJ0dWFsQ2F0ZWdvcnk+PiA9IG5ldyBNYXA8c3RyaW5nLCBTY0NhY2hlZEl0ZW08U2NWaXJ0dWFsQ2F0ZWdvcnk+PigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE1hcH0g0LrQvtC70LvQtdC60YbQuNGPINC/0LDRgCDQutC70Y7Rhy3Qt9C90LDRh9C10L3QuNC1INC00LvRjyDQutGN0YjQuNGA0L7QstCw0L3QvdGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZVxuICAgIHByaXZhdGUgY2F0ZWdvcnlNYXA6IE1hcDxudW1iZXIgfCBzdHJpbmcgfCB2b2lkLCBTY0NhY2hlZEl0ZW08U2NDYXRlZ29yeT4+ID0gbmV3IE1hcDxudW1iZXIgfCBzdHJpbmcgfCB2b2lkLCBTY0NhY2hlZEl0ZW08U2NDYXRlZ29yeT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC/0YDQvtC00YPQutGC0L7QsiDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvZHVjdE1hcDogTWFwPG51bWJlciB8IHN0cmluZywgU2NQcm9kdWN0PiA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nLCBTY1Byb2R1Y3Q+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60Y3RiNC40YDQvtCy0LDQvdC90YvRhSDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40Lgg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNhdGVnb3J5UHJvZHVjdHNNYXA6IE1hcDxudW1iZXIgfCBzdHJpbmcsIFNjQ2FjaGVkSXRlbTxTY1Byb2R1Y3RbXT4+ID0gbmV3IE1hcDxudW1iZXIsIFNjQ2FjaGVkSXRlbTxTY1Byb2R1Y3RbXT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60Y3RiNC40YDQvtCy0LDQvdC90YvRhSDRgNC10LrQvtC80LXQvdC00YPQtdC80YvRhSDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVjb21tZW5kZWRQcm9kdWN0c0J5Q2F0ZWdvcnlNYXA6IE1hcDxudW1iZXIgfCBzdHJpbmcsIFNjQ2FjaGVkSXRlbTxTY1Byb2R1Y3RbXT4+ID0gbmV3IE1hcDxudW1iZXIsIFNjQ2FjaGVkSXRlbTxTY1Byb2R1Y3RbXT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINC60Y3RiNC40YDQvtCy0LDQvdC90YvRhSDRgNC10LrQvtC80LXQvdC00YPQtdC80YvRhSDRgtC+0LLQsNGA0L7QsiDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVjb21tZW5kZWRQcm9kdWN0c0J5UHJvZHVjdE1hcDogTWFwPG51bWJlciB8IHN0cmluZywgU2NDYWNoZWRJdGVtPFNjUHJvZHVjdFtdPj4gPSBuZXcgTWFwPG51bWJlciwgU2NDYWNoZWRJdGVtPFNjUHJvZHVjdFtdPj4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBNYXB9INC60L7Qu9C70LXQutGG0LjRjyDQv9Cw0YAg0LrQu9GO0Yct0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0LrRjdGI0LjRgNC+0LLQsNC90LjRjyDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9kdWN0SGlzdG9yeU1hcDogTWFwPG51bWJlciB8IHN0cmluZywgU2NDYWNoZWRJdGVtPFNjUHJpY2VIaXN0b3J5Pj4gPSBuZXcgTWFwPG51bWJlciB8IHN0cmluZywgU2NDYWNoZWRJdGVtPFNjUHJpY2VIaXN0b3J5Pj4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/LCDQstC+0LfQstGA0LDRidCw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpINC40YHRhdC+0LTRjyDQuNC3INC90LDRgdGC0YDQvtC10Log0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWdQaXBlOiBTY0lkT3JTbHVnUGlwZSA9IGluamVjdChTY0lkT3JTbHVnUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINGB0L7Qv9C+0YHRgtCw0LLQu9C10L3QuNGPIHNsdWcg0LggaWQg0LrQsNGC0LXQs9C+0YDQuNC5INC/0YDQuCDQutC10YjQuNGA0L7QstCw0L3QuNC1INC30LDQv9GA0L7RgdC+0LIsINC10YHQu9C4INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC+0YLQu9C40YfQsNGC0YzRgdGPINC+0YIg0YPRgdGC0LDQvdC+0LLQu9C10L3QvdC+0LPQviDQsiDQv9GA0L7QtdC60YLQtSAoc2x1Zy9pZCkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeUlkT3JTbHVnTWFwOiBNYXA8bnVtYmVyIHwgc3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIgfCBzdHJpbmcsIG51bWJlciB8IHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqINCn0LjRgdC70L4g0L/QtdGA0LLRi9GFINC30LDQv9C40YHQtdC5INGC0L7QstCw0YDQvtCyINGB0L4g0YHQutC40LTQutC+0LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3VudEZpcnN0RGlzY291bnRlZFByb2R1Y3RzOiBudW1iZXIgPSBpbmplY3QoU0NfQ09VTlRfRklSU1RfRElTQ09VTlRFRF9QUk9EVUNUUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDRgdC+INGB0LrQuNC00LrQvtC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmaXJzdERpc2NvdW50ZWQkOiBPYnNlcnZhYmxlPFNjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsPiA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aENoYW5nZSgpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoYXV0aCkgPT4gKGF1dGggPyB0aGlzLmdldFByb2R1Y3RzJCh7IGZpbHRlcnM6IHsgb25seURpc2NvdW50ZWQ6IHRydWUgfSwgcGFnaW5hdGU6IHRydWUsIHBhZ2U6IDAsIHBlclBhZ2U6IHRoaXMuY291bnRGaXJzdERpc2NvdW50ZWRQcm9kdWN0cyB9KSA6IG9mKG51bGwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQv9C40YHQutCwINC40Lcg0L/QtdGA0LLRi9GFINGC0L7QstCw0YDQvtCyINGB0L4g0YHQutC40LTQutC+0LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZpcnN0RGlzY291bnRlZFByb2R1Y3RzJDogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXT4gPSB0aGlzLmZpcnN0RGlzY291bnRlZCQucGlwZShtYXAoKGRhdGEpID0+IGRhdGE/LmRhdGEgPz8gW10pKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0L7QsdGJ0LXQs9C+INC60L7Qu9C70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINGB0L4g0YHQutC40LTQutC+0LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvdW50RGlzY291bnRlZFByb2R1Y3RzJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5maXJzdERpc2NvdW50ZWQkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhPy5tZXRhLnRvdGFsID8/IDApKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgNCw0L3QtdC1INC30LDQutCw0LfQsNC90L3Ri9GFINGC0L7QstCw0YDQvtCyINGC0LXQutGD0YnQtdCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQg0KPQtNCw0LvQuNGC0Ywg0LIg0YDQsNC80LrQsNGFINC30LDQtNCw0YfQuCBUQVNLWyMxMDE1NV0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjdXJyZW50VXNlclByZXZpb3VzbHlPcmRlcmVkOiBTY0NhY2hlZEl0ZW08U2NQcm9kdWN0W10gfCBudWxsPiA9IG5ldyBTY0NhY2hlZEl0ZW08U2NQcm9kdWN0W10gfCBudWxsPihcbiAgICAgICAgdGhpcy5jYWNoZUxpZmVUaW1lLnByZXZpb3VzbHlPcmRlcmVkRGF0YSxcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoQ2hhbmdlKCkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoc3RhdGU6IGJvb2xlYW4pID0+IHN0YXRlKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8U2NJUHJvZHVjdERUT1tdPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzL3ByZXZpb3VzbHktb3JkZXJlZGApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocHJvZHVjdCkgPT4gcHJvZHVjdC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBuZXcgU2NQcm9kdWN0KGl0ZW0sIGluZGV4KSkpLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0NhdGFsb2dTZXJ2aWNlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodHRwINCh0LXRgNCy0LjRgSDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gSFRUUC3Qt9Cw0L/RgNC+0YHQvtCyLlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIHVpU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSBVSS5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqIEBwYXJhbSBhdXRoU2VydmljZSDQodC10YDQstC40YEg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gY2FjaGVMaWZlVGltZSDQntCx0YrQtdC60YIg0YEg0LjQvdGE0L7RgNC80LDRhtC40LXQuSDQviDQstGA0LXQvNC10L3QuCDQttC40LfQvdC4INC00LDQvdC90YvRhS5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1aVNlcnZpY2U6IFNjVUlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBTY0F1dGhTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNDX0NBQ0hFX0xJRkVUSU1FKSBwcml2YXRlIHJlYWRvbmx5IGNhY2hlTGlmZVRpbWU6IFNjSUNhY2hlTGlmZXRpbWUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QXV0aENoYW5nZSgpXG4gICAgICAgICAgICAucGlwZShza2lwKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZENhdGVnb3J5TWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeU1hcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdE1hcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdEhpc3RvcnlNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60LDRgtC10LPQvtGA0LjRjiDQuNC3INC60L7Qu9C70LXQutGG0LjQuCDQutCw0YLQsNC70L7Qs9CwLCDQtdGB0LvQuCDQtdGRINGB0YDQvtC6INC20LjQt9C90Lgg0L3QtSDQuNGB0YLRkdC6LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQg0KPQtNCw0LvQuNGC0Ywg0LIg0YDQsNC80LrQsNGFINC30LDQtNCw0YfQuCBUQVNLWyMxMDE1M10uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40Lgg0YLQvtCy0LDRgNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGdldENhdGVnb3J5RnJvbU1hcChjYXRlZ29yeUlkT3JTbHVnPzogbnVtYmVyIHwgc3RyaW5nKTogU2NDYXRlZ29yeSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5pZENhdGVnb3J5TWFwLmdldChjYXRlZ29yeUlkT3JTbHVnPy50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAoY2F0ZWdvcnkgJiYgKCFjYXRlZ29yeS5wYXJlbnRJZCB8fCAhY2F0ZWdvcnkubG9hZGVkQXQgfHwgY2F0ZWdvcnkuY2FjaGVkRGF0YUlzQWN0dWFsKHRoaXMuY2FjaGVMaWZlVGltZS5jYXRlZ29yeURhdGEpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pZENhdGVnb3J5TWFwLmRlbGV0ZShjYXRlZ29yeUlkT3JTbHVnPy50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGC0L7QstCw0YAg0LjQtyDQutC+0LvQu9C10LrRhtC40Lgg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkINCj0LTQsNC70LjRgtGMINCyINGA0LDQvNC60LDRhSDQt9Cw0LTQsNGH0LggVEFTS1sjMTAxNTNdLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3RJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0RnJvbU1hcChwcm9kdWN0SWRPclNsdWc6IG51bWJlciB8IHN0cmluZyk6IFNjUHJvZHVjdCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLnByb2R1Y3RNYXAuZ2V0KHByb2R1Y3RJZE9yU2x1Zy50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAocHJvZHVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb2R1Y3Q7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2R1Y3RNYXAuZGVsZXRlKHByb2R1Y3RJZE9yU2x1Zy50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC30LDQv9GA0L7RgSDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQv9C40YHQutCwINC60LDRgtC10LPQvtGA0LjQuSDRgtC+0LLQsNGA0L7QsiDQuNC70Lgg0YHQv9C40YHQvtC6INC60L7RgNC90LXQstGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LCDQtdGB0LvQuCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutCw0YLQtdCz0L7RgNC40Lgg0L3QtSDRg9C60LDQt9Cw0L0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40Lgg0YLQvtCy0LDRgNC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDYXRlZ29yeURhdGEkKGNhdGVnb3J5SWRPclNsdWc/OiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPFNjQ2F0ZWdvcnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U2NJQ2F0ZWdvcnlEVE8+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhdGFsb2cvY2F0ZWdvcmllcy8ke2NhdGVnb3J5SWRPclNsdWcgPz8gJyd9YCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoY2F0ZWdvcnkpID0+IG5ldyBTY0NhdGVnb3J5KGNhdGVnb3J5KSksXG4gICAgICAgICAgICB0YXAoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5SWRPclNsdWcgJiYgdHlwZW9mIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShjYXRlZ29yeSkgIT09IHR5cGVvZiBjYXRlZ29yeUlkT3JTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlJZE9yU2x1Z01hcC5zZXQodGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGNhdGVnb3J5KSwgY2F0ZWdvcnlJZE9yU2x1Zyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHRhcCgoY2F0ZWdvcnkpID0+XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnkuY2F0ZWdvcmllcz8uZm9yRWFjaCgoc3ViQ2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgIHN1YkNhdGVnb3J5LnBhcmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LrQvtGA0L3QtdCy0YvRhSDQutCw0YLQtdCz0L7RgNC40Lkg0YEg0L3QsNGB0YLRgNC+0LnQutCw0LzQuCDQvtGC0L7QsdGA0LDQttC10L3QuNGPLCDRh9GC0L7QsdGLINGA0LXQsNCz0LjRgNC+0LLQsNGC0Ywg0L3QsCDQuNC30LzQtdC90LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlcmVkUm9vdENhdGVnb3JpZXMkKCk6IE9ic2VydmFibGU8U2NDYXRlZ29yeVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVpU2VydmljZS5nZXRIaWRkZW5DYXRlZ29yaWVzTGlzdCQoKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChmaWx0ZXJzKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Um9vdENhdGVnb3JpZXMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YS5maWx0ZXIoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS5pZCAmJiAhZmlsdGVycy5pbmNsdWRlcyhjYXRlZ29yeS5pZCkpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQvtC00LXRgNC20LjQvNC+0LPQviDQstC40YDRgtGD0LDQu9GM0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbHVnINCh0LjQvNCy0L7Qu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINCy0LjRgNGC0YPQsNC70YzQvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWaXJ0dWFsQ2F0ZWdvcnlDYWNoZWQkKHNsdWc6IHN0cmluZyk6IE9ic2VydmFibGU8U2NWaXJ0dWFsQ2F0ZWdvcnkgfCBudWxsPiB7XG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy52aXJ0dWFsQ2F0ZWdvcnlNYXAuZ2V0KHNsdWcudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbShcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlTGlmZVRpbWUuY2F0ZWdvcnlEYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8U2NJVmlydHVhbENhdGVnb3J5RFRPPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3YtY2F0ZWdvcmllcy8ke3NsdWd9YCkucGlwZShtYXAoKGNhdGVnb3J5KSA9PiBuZXcgU2NWaXJ0dWFsQ2F0ZWdvcnkoY2F0ZWdvcnkpKSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMudmlydHVhbENhdGVnb3J5TWFwLnNldChzbHVnLnRvU3RyaW5nKCksIGNhY2hlZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtLmNhY2hlZERhdGFJc0FjdHVhbCgpKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtLnVwZGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uaXRlbSQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INGB0L7QtNC10YDQttC40LzQvtCz0L4g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0LrQsNGC0LXQs9C+0YDQuNC4INGC0L7QstCw0YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXRlZ29yeUNhY2hlZCQoY2F0ZWdvcnlJZE9yU2x1Zz86IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8U2NDYXRlZ29yeSB8IG51bGw+IHtcbiAgICAgICAgaWYgKGNhdGVnb3J5SWRPclNsdWcgJiYgdGhpcy5jYXRlZ29yeUlkT3JTbHVnTWFwLmhhcyhjYXRlZ29yeUlkT3JTbHVnKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBjYXRlZ29yeUlkT3JTbHVnID0gdGhpcy5jYXRlZ29yeUlkT3JTbHVnTWFwLmdldChjYXRlZ29yeUlkT3JTbHVnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy5jYXRlZ29yeU1hcC5nZXQoY2F0ZWdvcnlJZE9yU2x1Zz8udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbSh0aGlzLmNhY2hlTGlmZVRpbWUuY2F0ZWdvcnlEYXRhLCB0aGlzLmdldENhdGVnb3J5RGF0YSQoY2F0ZWdvcnlJZE9yU2x1ZykpO1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeU1hcC5zZXQoY2F0ZWdvcnlJZE9yU2x1Zz8udG9TdHJpbmcoKSwgY2FjaGVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0uY2FjaGVkRGF0YUlzQWN0dWFsKCkpIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0udXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINC60L7RgNC90LXQstGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROdWxsQ2F0ZWdvcnkkKCk6IE9ic2VydmFibGU8U2NDYXRlZ29yeSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcnlDYWNoZWQkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDQutC+0YDQvdC10LLRi9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um9vdENhdGVnb3JpZXMkKCk6IE9ic2VydmFibGU8U2NDYXRlZ29yeVtdIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXROdWxsQ2F0ZWdvcnkkKCkucGlwZShtYXAoKG51bGxDYXRlZ29yeSkgPT4gbnVsbENhdGVnb3J5Py5jYXRlZ29yaWVzID8/IG51bGwpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQoNCw0YHQutGA0YvQstCw0LXRgiDQutCw0YLQsNC70L7QsyDQtNC+INGD0LrQsNC30LDQvdC90L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40LgsINC00L4g0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0YDQsNGB0LrRgNGL0YLRjCDQutCw0YLQsNC70L7Qsy5cbiAgICAgKiBAcmV0dXJucyDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC/0LjRgdC+0Log0YDQsNGB0LrRgNGL0YLRi9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZENhdGFsb2dUcmVlQ2FjaGVkJChjYXRlZ29yeUlkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcnlDYWNoZWQkKGNhdGVnb3J5SWRPclNsdWcpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBleHBhbmQoKGNhdGVnb3J5KSA9PiAoY2F0ZWdvcnkucGFyZW50SWQgPyB0aGlzLmdldENhdGVnb3J5Q2FjaGVkJChjYXRlZ29yeS5wYXJlbnRJZCkgOiB0aGlzLmdldE51bGxDYXRlZ29yeSQoKSkucGlwZShmaWx0ZXIodHVpSXNQcmVzZW50KSwgZmlyc3QoKSkpLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24sc29uYXJqcy9kaWZmZXJlbnQtdHlwZXMtY29tcGFyaXNvblxuICAgICAgICAgICAgdGFrZVdoaWxlKChwYXJlbnRDYXRlZ29yeSkgPT4gcGFyZW50Q2F0ZWdvcnkuaWQgIT09IHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAgICAgICAgICB0b0FycmF5KCksXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby1taXNsZWFkaW5nLWFycmF5LXJldmVyc2VcbiAgICAgICAgICAgIG1hcCgoY2F0ZWdvcmllcykgPT4gY2F0ZWdvcmllcy5yZXZlcnNlKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC/0L7Qu9GD0YfQtdC90LjRjyDQuNGB0YLQvtGA0LjQuCDQuNC30LzQtdC90LXQvdC40Y8g0YbQtdC9INC90LAg0L/RgNC+0LTRg9C60YIg0LTQu9GPINC60LvQuNC10L3RgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0J/RgNC+0LTRg9C60YIsINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC30LDQv9GA0LDRiNC40LLQsNC10YLRgdGPINGG0LXQvdCwLlxuICAgICAqIEByZXR1cm5zINCY0YHRgtC+0YDQuNGPINC40LfQvNC10L3QtdC90LjRjyDRhtC10L0g0L3QsCDQv9GA0L7QtNGD0LrRgiDQtNC70Y8g0LrQu9C40LXQvdGC0LAg0LIg0YTQvtGA0LzQsNGC0LUge0BsaW5rIE9ic2VydmFibGV9INC40Lcg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFByaWNlSGlzdG9yeSQocHJvZHVjdDogU2NQcm9kdWN0KTogT2JzZXJ2YWJsZTxTY1ByaWNlSGlzdG9yeSB8IG51bGw+IHtcbiAgICAgICAgbGV0IGNhY2hlZEl0ZW0gPSB0aGlzLnByb2R1Y3RIaXN0b3J5TWFwLmdldChwcm9kdWN0LmlkLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIGlmICghY2FjaGVkSXRlbSkge1xuICAgICAgICAgICAgY2FjaGVkSXRlbSA9IG5ldyBTY0NhY2hlZEl0ZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUxpZmVUaW1lLmNhdGVnb3J5RGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAgICAgLmdldDxTY1ByaWNlSGlzdG9yeT4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2F0YWxvZy9wcm9kdWN0cy8ke3Byb2R1Y3QuaWR9L3ByaWNlLWhpc3RvcnlgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhULFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHt9KSkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RIaXN0b3J5TWFwLnNldChwcm9kdWN0LmlkLnRvU3RyaW5nKCksIGNhY2hlZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uaXRlbSQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LTQu9GPINC60L7QvdC60YDQtdGC0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXMg0J/QsNGA0LDQvNC10YLRgNGLINC30LDQv9GA0L7RgdCwINGC0L7QstCw0YDQvtCyINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJvZHVjdHMkKHBhcmFtczogU2NJQ2F0ZWdvcnlQcm9kdWN0UGFyYW1zKTogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXT47XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQsNC70L7Qs9CwINGBINC/0LDQs9C40L3QsNGG0LjQtdC5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtcyDQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4INGC0L7QstCw0YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0cyQocGFyYW1zOiBTY0lDYXRlZ29yeVByb2R1Y3RQYWdpbmF0aW9uUGFyYW1zKTogT2JzZXJ2YWJsZTxTY0lQYWdpbmF0ZTxTY1Byb2R1Y3Q+PjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgcHVibGljIGdldFByb2R1Y3RzJChwYXJhbXM6IFNjSUNhdGVnb3J5UHJvZHVjdFBhcmFtcyB8IFNjSUNhdGVnb3J5UHJvZHVjdFBhZ2luYXRpb25QYXJhbXMpOiBPYnNlcnZhYmxlPFNjUHJvZHVjdFtdIHwgU2NJUGFnaW5hdGU8U2NQcm9kdWN0Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PFNjSVBhZ2luYXRlPFNjSVByb2R1Y3REVE8+IHwgU2NJUHJvZHVjdERUT1tdPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzYCwge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnRvSHR0cFBhcmFtcyh7IC4uLnBhcmFtcyB9LCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2Z1bmN0aW9uLXJldHVybi10eXBlXG4gICAgICAgICAgICAgICAgbWFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgnbWV0YScgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xvbmVEYXRhID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZURhdGEuZGF0YSA9IGNsb25lRGF0YS5kYXRhLm1hcCgoaXRlbSkgPT4gbmV3IFNjUHJvZHVjdChpdGVtKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGEgYXMgU2NJUGFnaW5hdGU8U2NQcm9kdWN0PjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSwgaW5kZXgpID0+IG5ldyBTY1Byb2R1Y3QoaXRlbSwgaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40Lgg0Lgg0LrRjdGI0LjRgNGD0LXRgiDQtdCz0L4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zINCf0LDRgNCw0LzQtdGC0YDRiyDQt9Cw0L/RgNC+0YHQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgcHVibGljIGdldFByb2R1Y3RzQ2F0ZWdvcnlDYWNoZWQkKHBhcmFtczogU2NJQ2F0ZWdvcnlQcm9kdWN0UGFyYW1zKTogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXSB8IG51bGw+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBpZiAoIXBhcmFtcy5jYXRlZ29yeUlkICYmICFwYXJhbXMuY2F0ZWdvcnlTbHVnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ9Cd0LUg0YPQutCw0LfQsNC9IGlkL3NsdWcg0LrQsNGC0LXQs9C+0YDQuNC4LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24sQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBjb25zdCBjYWNoZWRLZXkgPSAocGFyYW1zLmNhdGVnb3J5U2x1ZyA/PyBwYXJhbXMuY2F0ZWdvcnlJZCkhO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbCxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgbGV0IGNhY2hlZEl0ZW0gPSB0aGlzLmNhdGVnb3J5UHJvZHVjdHNNYXAuZ2V0KGNhY2hlZEtleS50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0gPSBuZXcgU2NDYWNoZWRJdGVtKHRoaXMuY2FjaGVMaWZlVGltZS5jYXRlZ29yeURhdGEsIHRoaXMuZ2V0UHJvZHVjdHMkKHBhcmFtcykpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeVByb2R1Y3RzTWFwLnNldChjYWNoZWRLZXkudG9TdHJpbmcoKSwgY2FjaGVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0uY2FjaGVkRGF0YUlzQWN0dWFsKCkpIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0udXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGD0LrQsNC30LDQvdC90L7QvCDQv9GA0L7QtNGD0LrRgtC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3RJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0SW5mbyQocHJvZHVjdElkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPFNjUHJvZHVjdD4ge1xuICAgICAgICBjb25zdCBwcm9kdWN0TWFwID0gdGhpcy5wcm9kdWN0TWFwLmdldChwcm9kdWN0SWRPclNsdWcudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgaWYgKHByb2R1Y3RNYXApIHtcbiAgICAgICAgICAgIHJldHVybiBvZjxTY1Byb2R1Y3RbXT4ocHJvZHVjdE1hcCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTY0lQcm9kdWN0RFRPPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzLyR7cHJvZHVjdElkT3JTbHVnfWApLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHByb2R1Y3REVE8pID0+IG5ldyBTY1Byb2R1Y3QocHJvZHVjdERUTykpLFxuICAgICAgICAgICAgdGFwKChwcm9kdWN0KSA9PiB0aGlzLnByb2R1Y3RNYXAuc2V0KHByb2R1Y3QuaWQudG9TdHJpbmcoKSwgcHJvZHVjdCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC90LAg0L/QvtC70YPRh9C10L3QuNC1INCz0LXQvdC10YDQuNGA0YPQtdC80L7Qs9C+INGE0LDQudC70LAg0L/RgNCw0LnRgS3Qu9C40YHRgtCwINCyINGE0L7RgNC80LDRgtC1IHtAbGluayBCbG9ifSwg0Lgg0LLRi9Cz0YDRg9C20LDQtdGCINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjiDQsiDQsdGA0LDRg9C30LXRgC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIHtAbGluayBTY01pbWVUeXBlc30g0LfQsNC/0YDQsNGI0LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwLlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60LDRgtC10LPQvtGA0LjQuCwg0LTQu9GPINC60L7RgtC+0YDQvtC5INC30LDQs9GA0YPQttCw0LXRgtGB0Y8g0L/RgNCw0LnRgS3Qu9C40YHRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZG93bmxvYWRQcmljZSQodHlwZTogU2NNaW1lVHlwZXMsIGNhdGVnb3J5SWQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPEJsb2I+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb252ZXJ0ZXJzU2VydmljZS50b0h0dHBQYXJhbXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBPYmplY3Qua2V5cyhTY01pbWVUeXBlcylbT2JqZWN0LnZhbHVlcyhTY01pbWVUeXBlcykuaW5kZXhPZih0eXBlKV0sXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGNhdGVnb3J5SWQgPz8gbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IG5vbk51bGxhYmxlOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL2Rvd25sb2FkYCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgcGFyYW1zOiBwYXJhbXMgfSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gbmV3IEJsb2IoW2Jsb2JdLCB7IHR5cGU6IHR5cGUgfSkpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXRhbG9nUHJpY2VEb3dubG9hZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeV9pZDogY2F0ZWdvcnlJZCA/PyAncm9vdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZV90eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgNCw0L3QtdC1INC30LDQutCw0LfQsNC90L3Ri9GFINGC0L7QstCw0YDQvtCyLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQg0KPQtNCw0LvQuNGC0Ywg0LIg0YDQsNC80LrQsNGFINC30LDQtNCw0YfQuCBUQVNLWyMxMDE1NV0uXG4gICAgICovXG4gICAgcHVibGljIGdldFByZXZpb3VzbHlPcmRlcmVkUHJvZHVjdHMkKCk6IE9ic2VydmFibGU8U2NQcm9kdWN0W10gfCBudWxsPiB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50VXNlclByZXZpb3VzbHlPcmRlcmVkLmNhY2hlZERhdGFJc0FjdHVhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyUHJldmlvdXNseU9yZGVyZWQudXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlclByZXZpb3VzbHlPcmRlcmVkLml0ZW0kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC30LDQv9GA0L7RgSDQvdCwINC/0L7Qu9GD0YfQtdC90LjQtSDRgdC/0LjRgdC60LAg0YDQtdC60L7QvNC10L3QtNC+0LLQsNC90L3Ri9GFINGC0L7QstCw0YDQvtCyINC00LvRjyDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40Lgg0YLQvtCy0LDRgNC+0LIuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UmVjb21tZW5kZWRQcm9kdWN0c0J5Q2F0ZWdvcnkkKGNhdGVnb3J5SWRPclNsdWc6IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8U2NQcm9kdWN0W10gfCBudWxsPiB7XG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy5yZWNvbW1lbmRlZFByb2R1Y3RzQnlDYXRlZ29yeU1hcC5nZXQoY2F0ZWdvcnlJZE9yU2x1Zy50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0pIHtcbiAgICAgICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INCy0YDQtdC80Y8g0LbQuNC30L3QuCBjYWNoZWRJdGVtINGA0LDQstC90L7QtSwg0L/QvtGC0L7QvNGDINGH0YLQviDQvdCw0Lwg0L3QtSDQstCw0LbQvdC+INCy0YDQtdC80Y8g0LbQuNC30L3QuC4g0J3QsNC8INC90YPQttC10L0g0YTRg9C90LrRhtC40L7QvdCw0LsgdXBkYXRlKCkuXG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0PFNjSVByb2R1Y3REVE9bXT4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2F0YWxvZy9jYXRlZ29yaWVzLyR7Y2F0ZWdvcnlJZE9yU2x1Z30vcmVjb21tZW5kYXRpb25zYClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKChwcm9kdWN0c0RUTykgPT4gcHJvZHVjdHNEVE8ubWFwKChwcm9kdWN0KSA9PiBuZXcgU2NQcm9kdWN0KHByb2R1Y3QpKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZWNvbW1lbmRlZFByb2R1Y3RzQnlDYXRlZ29yeU1hcC5zZXQoY2F0ZWdvcnlJZE9yU2x1Zy50b1N0cmluZygpLCBjYWNoZWRJdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYWNoZWRJdGVtLml0ZW0kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC30LDQv9GA0L7RgSDQvdCwINC/0L7Qu9GD0YfQtdC90LjQtSDRgdC/0LjRgdC60LAg0YDQtdC60L7QvNC10L3QtNC+0LLQsNC90L3Ri9GFINGC0L7QstCw0YDQvtCyINC00LvRjyDQv9GA0L7QtNGD0LrRgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3RJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgcHVibGljIGdldFJlY29tbWVuZGVkUHJvZHVjdHNCeVByb2R1Y3QkKHByb2R1Y3RJZE9yU2x1ZzogbnVtYmVyIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXSB8IG51bGw+IHtcbiAgICAgICAgbGV0IGNhY2hlZEl0ZW0gPSB0aGlzLnJlY29tbWVuZGVkUHJvZHVjdHNCeVByb2R1Y3RNYXAuZ2V0KHByb2R1Y3RJZE9yU2x1Zy50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0pIHtcbiAgICAgICAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INCy0YDQtdC80Y8g0LbQuNC30L3QuCBjYWNoZWRJdGVtINGA0LDQstC90L7QtSwg0L/QvtGC0L7QvNGDINGH0YLQviDQvdCw0Lwg0L3QtSDQstCw0LbQvdC+INCy0YDQtdC80Y8g0LbQuNC30L3QuC4g0J3QsNC8INC90YPQttC10L0g0YTRg9C90LrRhtC40L7QvdCw0LsgdXBkYXRlKCkuXG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgICAgICAuZ2V0PFNjSVByb2R1Y3REVE9bXT4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2F0YWxvZy9wcm9kdWN0cy8ke3Byb2R1Y3RJZE9yU2x1Z30vcmVjb21tZW5kYXRpb25zYClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwKChwcm9kdWN0c0RUTykgPT4gcHJvZHVjdHNEVE8ubWFwKChwcm9kdWN0KSA9PiBuZXcgU2NQcm9kdWN0KHByb2R1Y3QpKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZWNvbW1lbmRlZFByb2R1Y3RzQnlQcm9kdWN0TWFwLnNldChwcm9kdWN0SWRPclNsdWcudG9TdHJpbmcoKSwgY2FjaGVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/RgNC+0YEg0L3QsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQviDQv9C+0YHRgtGD0L/Qu9C10L3QuNC4INC/0YDQvtC00YPQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdElkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gZGF0YSDQlNCw0L3QvdGL0LUg0LTQu9GPINC30LDQv9GA0L7RgdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0Tm90aWZ5V2hlbkluU3RvY2skKHByb2R1Y3RJZE9yU2x1Zzogc3RyaW5nIHwgbnVtYmVyLCBkYXRhOiBTY0lQcm9kdWN0Tm90aWZ5V2hlbkluU3RvY2spOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dW5kZWZpbmVkPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzLyR7cHJvZHVjdElkT3JTbHVnfS9zdG9jay1ub3RpZnlgLCBkYXRhKTtcbiAgICB9XG59XG4iXX0=
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9jYXRhbG9nL3NlcnZpY2VzL3NjLWNhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT2hKLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUtyRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw4Q0FB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ZXNDb250ZW50IjpbIi8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVUeXBlc1xuXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZXhwYW5kLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIE9ic2VydmFibGUsIG9mLCBzaGFyZVJlcGxheSwgc2tpcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2VXaGlsZSwgdGFwLCB0b0FycmF5IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hdXRoL3NlcnZpY2VzL3NjLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBTY0lDYWNoZUxpZmV0aW1lIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktY2FjaGUtbGlmZXRpbWUnO1xuaW1wb3J0IHsgU2NJVXJscyB9IGZyb20gJy4uLy4uL2NvbmZpZy9zYy1pLXVybHMnO1xuaW1wb3J0IHsgU2NDb252ZXJ0ZXJzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnZlcnRlcnMvc2VydmljZXMvc2MtY29udmVydGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IFNjSVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vcGFnaW5hdGlvbi9kdG8vc2MtaS1wYWdpbmF0ZSc7XG5pbXBvcnQgeyBTY0lkT3JTbHVnUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLWlkLW9yLXNsdWcucGlwZSc7XG5pbXBvcnQgeyBTQ19DQUNIRV9MSUZFVElNRSB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1jYWNoZS1saWZldGltZSc7XG5pbXBvcnQgeyBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhUIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWlzLWhpZGRlbi1lcnJvci1hbGVydCc7XG5pbXBvcnQgeyBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLXVybHMnO1xuaW1wb3J0IHsgU2NVSVNlcnZpY2UgfSBmcm9tICcuLi8uLi91aS9zZXJ2aWNlcy9zYy11aS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjVXNlck1ldHJpa2FHb2Fsc0VudW0gfSBmcm9tICcuLi8uLi91c2VyLW1ldHJpa2EvZW51bXMvc2MtdXNlci1tZXRyaWthLWdvYWxzLWVudW0nO1xuaW1wb3J0IHsgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICcuLi8uLi91c2VyLW1ldHJpa2Evc2VydmljZXMvc2MtdXNlci1tZXRyaWthLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NDYWNoZWRJdGVtIH0gZnJvbSAnLi4vY2xhc3Nlcyc7XG5pbXBvcnQgeyBTY0NhdGVnb3J5IH0gZnJvbSAnLi4vZHRvL3NjLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSVByb2R1Y3ROb3RpZnlXaGVuSW5TdG9jayB9IGZyb20gJy4uL2R0by9zYy1pLXByb2R1Y3Qtbm90aWZ5LXdoZW4taW4tc3RvY2snO1xuaW1wb3J0IHsgU2NQcm9kdWN0IH0gZnJvbSAnLi4vZHRvL3NjLXByb2R1Y3QnO1xuaW1wb3J0IHsgU2NWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi9kdG8vc2MtdmlydHVhbC1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY01pbWVUeXBlcyB9IGZyb20gJy4uL2VudW1zL3NjLW1pbWUtdHlwZXMnO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnlQcm9kdWN0UGFyYW1zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLWNhdGVnb3J5LXByb2R1Y3QtcGFyYW1zJztcbmltcG9ydCB7IFNjSUNhdGVnb3J5UHJvZHVjdFBhZ2luYXRpb25QYXJhbXMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktY2F0ZWdvcnktcHJvZHVjdHMtcGFnaW5hdGlvbi1wYXJhbXMnO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnlEVE8sIFNjSVByb2R1Y3REVE8gfSBmcm9tICcuLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBTY0lWaXJ0dWFsQ2F0ZWdvcnlEVE8gfSBmcm9tICcuLi9pbnRlcm5hbC9zYy1pLXZpcnR1YWwtY2F0ZWdvcnktZHRvJztcbmltcG9ydCB7IFNDX0NPVU5UX0ZJUlNUX0RJU0NPVU5URURfUFJPRFVDVFMgfSBmcm9tICcuLi90b2tlbnMvc2MtY291bnQtZmlyc3QtZGlzY291bnRlZC1wcm9kdWN0cyc7XG5pbXBvcnQgeyBTY1ByaWNlSGlzdG9yeSB9IGZyb20gJy4uL3R5cGVzL3NjLXByaWNlLWhpc3RvcnknO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60LDRgtCw0LvQvtCz0L7QvC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXRhbG9nU2VydmljZSB7XG4gICAgLyoqXG4gICAgICoge0BsaW5rIE1hcH0g0LrQvtC70LvQtdC60YbQuNGPINC/0LDRgCDQutC70Y7Rhy3Qt9C90LDRh9C10L3QuNC1INC00LvRjyDQutCw0YLQtdCz0L7RgNC40Lkg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBpZENhdGVnb3J5TWFwOiBNYXA8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBTY0NhdGVnb3J5PiA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkLCBTY0NhdGVnb3J5PigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE1hcH0g0LrQvtC70LvQtdC60YbQuNGPINC/0LDRgCDQutC70Y7Rhy3Qt9C90LDRh9C10L3QuNC1INC00LvRjyDQstC40YDRgtGD0LDQu9GM0L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHZpcnR1YWxDYXRlZ29yeU1hcDogTWFwPHN0cmluZywgU2NDYWNoZWRJdGVtPFNjVmlydHVhbENhdGVnb3J5Pj4gPSBuZXcgTWFwPHN0cmluZywgU2NDYWNoZWRJdGVtPFNjVmlydHVhbENhdGVnb3J5Pj4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBNYXB9INC60L7Qu9C70LXQutGG0LjRjyDQv9Cw0YAg0LrQu9GO0Yct0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0LrRjdGI0LjRgNC+0LLQsNC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW52YWxpZC12b2lkLXR5cGVcbiAgICBwcml2YXRlIGNhdGVnb3J5TWFwOiBNYXA8bnVtYmVyIHwgc3RyaW5nIHwgdm9pZCwgU2NDYWNoZWRJdGVtPFNjQ2F0ZWdvcnk+PiA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nIHwgdm9pZCwgU2NDYWNoZWRJdGVtPFNjQ2F0ZWdvcnk+PigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE1hcH0g0LrQvtC70LvQtdC60YbQuNGPINC/0LDRgCDQutC70Y7Rhy3Qt9C90LDRh9C10L3QuNC1INC00LvRjyDQv9GA0L7QtNGD0LrRgtC+0LIg0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2R1Y3RNYXA6IE1hcDxudW1iZXIgfCBzdHJpbmcsIFNjQ2FjaGVkSXRlbTxTY1Byb2R1Y3Q+PiA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nLCBTY0NhY2hlZEl0ZW08U2NQcm9kdWN0Pj4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBNYXB9INC60L7Qu9C70LXQutGG0LjRjyDQv9Cw0YAg0LrQu9GO0Yct0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0LrRjdGI0LjRgNC+0LLQsNC90L3Ri9GFINGC0L7QstCw0YDQvtCyINC60LDRgtC10LPQvtGA0LjQuCDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIHByaXZhdGUgY2F0ZWdvcnlQcm9kdWN0c01hcDogTWFwPG51bWJlciB8IHN0cmluZywgU2NDYWNoZWRJdGVtPFNjUHJvZHVjdFtdPj4gPSBuZXcgTWFwPG51bWJlciwgU2NDYWNoZWRJdGVtPFNjUHJvZHVjdFtdPj4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBNYXB9INC60L7Qu9C70LXQutGG0LjRjyDQv9Cw0YAg0LrQu9GO0Yct0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0LrRjdGI0LjRgNC+0LLQsNC90LjRjyDQuNGB0YLQvtGA0LjQuCDRhtC10L0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9kdWN0SGlzdG9yeU1hcDogTWFwPG51bWJlciB8IHN0cmluZywgU2NDYWNoZWRJdGVtPFNjUHJpY2VIaXN0b3J5Pj4gPSBuZXcgTWFwPG51bWJlciB8IHN0cmluZywgU2NDYWNoZWRJdGVtPFNjUHJpY2VIaXN0b3J5Pj4oKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/LCDQstC+0LfQstGA0LDRidCw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpINC40YHRhdC+0LTRjyDQuNC3INC90LDRgdGC0YDQvtC10Log0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWRPclNsdWdQaXBlOiBTY0lkT3JTbHVnUGlwZSA9IGluamVjdChTY0lkT3JTbHVnUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgTWFwfSDQutC+0LvQu9C10LrRhtC40Y8g0L/QsNGAINC60LvRjtGHLdC30L3QsNGH0LXQvdC40LUg0LTQu9GPINGB0L7Qv9C+0YHRgtCw0LLQu9C10L3QuNGPIHNsdWcg0LggaWQg0LrQsNGC0LXQs9C+0YDQuNC5INC/0YDQuCDQutC10YjQuNGA0L7QstCw0L3QuNC4INC30LDQv9GA0L7RgdC+0LIsINC10YHQu9C4INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC+0YLQu9C40YfQsNC10YLRgdGPINC+0YIg0YPRgdGC0LDQvdC+0LLQu9C10L3QvdC+0LPQviDQsiDQv9GA0L7QtdC60YLQtSAoc2x1Zy9pZCkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeUlkT3JTbHVnTWFwOiBNYXA8bnVtYmVyIHwgc3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIgfCBzdHJpbmcsIG51bWJlciB8IHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBNYXB9INC60L7Qu9C70LXQutGG0LjRjyDQv9Cw0YAg0LrQu9GO0Yct0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8g0YHQvtC/0L7RgdGC0LDQstC70LXQvdC40Y8gc2x1ZyDQuCBpZCDRgtC+0LLQsNGA0L7QsiDQv9GA0Lgg0LrQtdGI0LjRgNC+0LLQsNC90LjQuCDQt9Cw0L/RgNC+0YHQvtCyLCDQtdGB0LvQuCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQvtGC0LvQuNGH0LDQtdGC0YHRjyDQvtGCINGD0YHRgtCw0L3QvtCy0LvQtdC90L3QvtCz0L4g0LIg0L/RgNC+0LXQutGC0LUgKHNsdWcvaWQpLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdElkT3JTbHVnTWFwOiBNYXA8bnVtYmVyIHwgc3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIgfCBzdHJpbmcsIG51bWJlciB8IHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqINCn0LjRgdC70L4g0L/QtdGA0LLRi9GFINC30LDQv9C40YHQtdC5INGC0L7QstCw0YDQvtCyINGB0L4g0YHQutC40LTQutC+0LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb3VudEZpcnN0RGlzY291bnRlZFByb2R1Y3RzOiBudW1iZXIgPSBpbmplY3QoU0NfQ09VTlRfRklSU1RfRElTQ09VTlRFRF9QUk9EVUNUUyk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LjQt9C80LXQvdC10L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDRgdC+INGB0LrQuNC00LrQvtC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBmaXJzdERpc2NvdW50ZWQkOiBPYnNlcnZhYmxlPFNjSVBhZ2luYXRlPFNjUHJvZHVjdD4gfCBudWxsPiA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aENoYW5nZSgpLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoYXV0aCkgPT4gKGF1dGggPyB0aGlzLmdldFByb2R1Y3RzJCh7IGZpbHRlcnM6IHsgb25seURpc2NvdW50ZWQ6IHRydWUgfSwgcGFnaW5hdGU6IHRydWUsIHBhZ2U6IDAsIHBlclBhZ2U6IHRoaXMuY291bnRGaXJzdERpc2NvdW50ZWRQcm9kdWN0cyB9KSA6IG9mKG51bGwpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQv9C40YHQutCwINC40Lcg0L/QtdGA0LLRi9GFINGC0L7QstCw0YDQvtCyINGB0L4g0YHQutC40LTQutC+0LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGZpcnN0RGlzY291bnRlZFByb2R1Y3RzJDogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXT4gPSB0aGlzLmZpcnN0RGlzY291bnRlZCQucGlwZShtYXAoKGRhdGEpID0+IGRhdGE/LmRhdGEgPz8gW10pKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0L7QsdGJ0LXQs9C+INC60L7Qu9C70LjRh9C10YHRgtCy0LAg0YLQvtCy0LDRgNCwINGB0L4g0YHQutC40LTQutC+0LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNvdW50RGlzY291bnRlZFByb2R1Y3RzJDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5maXJzdERpc2NvdW50ZWQkLnBpcGUobWFwKChkYXRhKSA9PiBkYXRhPy5tZXRhLnRvdGFsID8/IDApKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRgNCw0L3QtdC1INC30LDQutCw0LfQsNC90L3Ri9GFINGC0L7QstCw0YDQvtCyINGC0LXQutGD0YnQtdCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQg0KPQtNCw0LvQuNGC0Ywg0LIg0YDQsNC80LrQsNGFINC30LDQtNCw0YfQuCBUQVNLWyMxMDE1NV0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjdXJyZW50VXNlclByZXZpb3VzbHlPcmRlcmVkOiBTY0NhY2hlZEl0ZW08U2NQcm9kdWN0W10gfCBudWxsPiA9IG5ldyBTY0NhY2hlZEl0ZW08U2NQcm9kdWN0W10gfCBudWxsPihcbiAgICAgICAgdGhpcy5jYWNoZUxpZmVUaW1lLnByZXZpb3VzbHlPcmRlcmVkRGF0YSxcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoQ2hhbmdlKCkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoc3RhdGU6IGJvb2xlYW4pID0+IHN0YXRlKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8U2NJUHJvZHVjdERUT1tdPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzL3ByZXZpb3VzbHktb3JkZXJlZGApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocHJvZHVjdCkgPT4gcHJvZHVjdC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBuZXcgU2NQcm9kdWN0KGl0ZW0sIGluZGV4KSkpLFxuICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY0NhdGFsb2dTZXJ2aWNlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodHRwINCh0LXRgNCy0LjRgSDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gSFRUUC3Qt9Cw0L/RgNC+0YHQvtCyLlxuICAgICAqIEBwYXJhbSB1cmxzINCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0Log0L3QsCDRgNCw0LfQtNC10LvRiyBiYWNrZW5kJ2EuXG4gICAgICogQHBhcmFtIHVpU2VydmljZSDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSBVSS5cbiAgICAgKiBAcGFyYW0gY29udmVydGVyc1NlcnZpY2Ug0KHQtdGA0LLQuNGBINC60L7QvdCy0LXRgNGC0LDRhtC40Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqIEBwYXJhbSBhdXRoU2VydmljZSDQodC10YDQstC40YEg0LDRg9GC0LXQvdGC0LjRhNC40LrQsNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gY2FjaGVMaWZlVGltZSDQntCx0YrQtdC60YIg0YEg0LjQvdGE0L7RgNC80LDRhtC40LXQuSDQviDQstGA0LXQvNC10L3QuCDQttC40LfQvdC4INC00LDQvdC90YvRhS5cbiAgICAgKiBAcGFyYW0gdXNlck1ldHJpa2FTZXJ2aWNlINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KFNDX1VSTFMpIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1aVNlcnZpY2U6IFNjVUlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBTY0F1dGhTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNDX0NBQ0hFX0xJRkVUSU1FKSBwcml2YXRlIHJlYWRvbmx5IGNhY2hlTGlmZVRpbWU6IFNjSUNhY2hlTGlmZXRpbWUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QXV0aENoYW5nZSgpXG4gICAgICAgICAgICAucGlwZShza2lwKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZENhdGVnb3J5TWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeU1hcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdEhpc3RvcnlNYXAuY2xlYXIoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60LDRgtC10LPQvtGA0LjRjiDQuNC3INC60L7Qu9C70LXQutGG0LjQuCDQutCw0YLQsNC70L7Qs9CwLCDQtdGB0LvQuCDQtdGRINGB0YDQvtC6INC20LjQt9C90Lgg0L3QtSDQuNGB0YLRkdC6LlxuICAgICAqXG4gICAgICogQGRlcHJlY2F0ZWQg0KPQtNCw0LvQuNGC0Ywg0LIg0YDQsNC80LrQsNGFINC30LDQtNCw0YfQuCBUQVNLWyMxMDE1M10uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40Lgg0YLQvtCy0LDRgNC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGdldENhdGVnb3J5RnJvbU1hcChjYXRlZ29yeUlkT3JTbHVnPzogbnVtYmVyIHwgc3RyaW5nKTogU2NDYXRlZ29yeSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gdGhpcy5pZENhdGVnb3J5TWFwLmdldChjYXRlZ29yeUlkT3JTbHVnPy50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAoY2F0ZWdvcnkgJiYgKCFjYXRlZ29yeS5wYXJlbnRJZCB8fCAhY2F0ZWdvcnkubG9hZGVkQXQgfHwgY2F0ZWdvcnkuY2FjaGVkRGF0YUlzQWN0dWFsKHRoaXMuY2FjaGVMaWZlVGltZS5jYXRlZ29yeURhdGEpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pZENhdGVnb3J5TWFwLmRlbGV0ZShjYXRlZ29yeUlkT3JTbHVnPy50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCINC30LDQv9GA0L7RgSDQv9C+0LvRg9GH0LXQvdC40Y8g0YHQv9C40YHQutCwINC60LDRgtC10LPQvtGA0LjQuSDRgtC+0LLQsNGA0L7QsiDQuNC70Lgg0YHQv9C40YHQvtC6INC60L7RgNC90LXQstGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LCDQtdGB0LvQuCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutCw0YLQtdCz0L7RgNC40Lgg0L3QtSDRg9C60LDQt9Cw0L0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40Lgg0YLQvtCy0LDRgNC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDYXRlZ29yeURhdGEkKGNhdGVnb3J5SWRPclNsdWc/OiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPFNjQ2F0ZWdvcnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U2NJQ2F0ZWdvcnlEVE8+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhdGFsb2cvY2F0ZWdvcmllcy8ke2NhdGVnb3J5SWRPclNsdWcgPz8gJyd9YCkucGlwZShcbiAgICAgICAgICAgIG1hcCgoY2F0ZWdvcnkpID0+IG5ldyBTY0NhdGVnb3J5KGNhdGVnb3J5KSksXG4gICAgICAgICAgICB0YXAoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5SWRPclNsdWcgJiYgdHlwZW9mIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShjYXRlZ29yeSkgIT09IHR5cGVvZiBjYXRlZ29yeUlkT3JTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlJZE9yU2x1Z01hcC5zZXQodGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGNhdGVnb3J5KSwgY2F0ZWdvcnlJZE9yU2x1Zyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIHRhcCgoY2F0ZWdvcnkpID0+XG4gICAgICAgICAgICAgICAgY2F0ZWdvcnkuY2F0ZWdvcmllcz8uZm9yRWFjaCgoc3ViQ2F0ZWdvcnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICAgICAgICAgIHN1YkNhdGVnb3J5LnBhcmVudENhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LrQvtGA0L3QtdCy0YvRhSDQutCw0YLQtdCz0L7RgNC40Lkg0YEg0L3QsNGB0YLRgNC+0LnQutCw0LzQuCDQvtGC0L7QsdGA0LDQttC10L3QuNGPLCDRh9GC0L7QsdGLINGA0LXQsNCz0LjRgNC+0LLQsNGC0Ywg0L3QsCDQuNC30LzQtdC90LXQvdC40Y8uXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlcmVkUm9vdENhdGVnb3JpZXMkKCk6IE9ic2VydmFibGU8U2NDYXRlZ29yeVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnVpU2VydmljZS5nZXRIaWRkZW5DYXRlZ29yaWVzTGlzdCQoKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChmaWx0ZXJzKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Um9vdENhdGVnb3JpZXMkKCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHR1aUlzUHJlc2VudCksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YS5maWx0ZXIoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS5pZCAmJiAhZmlsdGVycy5pbmNsdWRlcyhjYXRlZ29yeS5pZCkpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQvtC00LXRgNC20LjQvNC+0LPQviDQstC40YDRgtGD0LDQu9GM0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzbHVnINCh0LjQvNCy0L7Qu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINCy0LjRgNGC0YPQsNC70YzQvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRWaXJ0dWFsQ2F0ZWdvcnlDYWNoZWQkKHNsdWc6IHN0cmluZyk6IE9ic2VydmFibGU8U2NWaXJ0dWFsQ2F0ZWdvcnkgfCBudWxsPiB7XG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy52aXJ0dWFsQ2F0ZWdvcnlNYXAuZ2V0KHNsdWcudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbShcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlTGlmZVRpbWUuY2F0ZWdvcnlEYXRhLFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8U2NJVmlydHVhbENhdGVnb3J5RFRPPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3YtY2F0ZWdvcmllcy8ke3NsdWd9YCkucGlwZShtYXAoKGNhdGVnb3J5KSA9PiBuZXcgU2NWaXJ0dWFsQ2F0ZWdvcnkoY2F0ZWdvcnkpKSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMudmlydHVhbENhdGVnb3J5TWFwLnNldChzbHVnLnRvU3RyaW5nKCksIGNhY2hlZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtLmNhY2hlZERhdGFJc0FjdHVhbCgpKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtLnVwZGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uaXRlbSQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INGB0L7QtNC10YDQttC40LzQvtCz0L4g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5SWRPclNsdWcg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4IHNsdWcg0LrQsNGC0LXQs9C+0YDQuNC4INGC0L7QstCw0YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDYXRlZ29yeUNhY2hlZCQoY2F0ZWdvcnlJZE9yU2x1Zz86IG51bWJlciB8IHN0cmluZyk6IE9ic2VydmFibGU8U2NDYXRlZ29yeSB8IG51bGw+IHtcbiAgICAgICAgaWYgKGNhdGVnb3J5SWRPclNsdWcgJiYgdGhpcy5jYXRlZ29yeUlkT3JTbHVnTWFwLmhhcyhjYXRlZ29yeUlkT3JTbHVnKSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBjYXRlZ29yeUlkT3JTbHVnID0gdGhpcy5jYXRlZ29yeUlkT3JTbHVnTWFwLmdldChjYXRlZ29yeUlkT3JTbHVnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy5jYXRlZ29yeU1hcC5nZXQoY2F0ZWdvcnlJZE9yU2x1Zz8udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbSh0aGlzLmNhY2hlTGlmZVRpbWUuY2F0ZWdvcnlEYXRhLCB0aGlzLmdldENhdGVnb3J5RGF0YSQoY2F0ZWdvcnlJZE9yU2x1ZykpO1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeU1hcC5zZXQoY2F0ZWdvcnlJZE9yU2x1Zz8udG9TdHJpbmcoKSwgY2FjaGVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0uY2FjaGVkRGF0YUlzQWN0dWFsKCkpIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0udXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINC60L7RgNC90LXQstGL0YUg0LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROdWxsQ2F0ZWdvcnkkKCk6IE9ic2VydmFibGU8U2NDYXRlZ29yeSB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcnlDYWNoZWQkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDQutC+0YDQvdC10LLRi9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Um9vdENhdGVnb3JpZXMkKCk6IE9ic2VydmFibGU8U2NDYXRlZ29yeVtdIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXROdWxsQ2F0ZWdvcnkkKCkucGlwZShtYXAoKG51bGxDYXRlZ29yeSkgPT4gbnVsbENhdGVnb3J5Py5jYXRlZ29yaWVzID8/IG51bGwpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQoNCw0YHQutGA0YvQstCw0LXRgiDQutCw0YLQsNC70L7QsyDQtNC+INGD0LrQsNC30LDQvdC90L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDQutCw0YLQtdCz0L7RgNC40LgsINC00L4g0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0YDQsNGB0LrRgNGL0YLRjCDQutCw0YLQsNC70L7Qsy5cbiAgICAgKiBAcmV0dXJucyDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC/0LjRgdC+0Log0YDQsNGB0LrRgNGL0YLRi9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZENhdGFsb2dUcmVlQ2FjaGVkJChjYXRlZ29yeUlkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2F0ZWdvcnlDYWNoZWQkKGNhdGVnb3J5SWRPclNsdWcpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBleHBhbmQoKGNhdGVnb3J5KSA9PiAoY2F0ZWdvcnkucGFyZW50SWQgPyB0aGlzLmdldENhdGVnb3J5Q2FjaGVkJChjYXRlZ29yeS5wYXJlbnRJZCkgOiB0aGlzLmdldE51bGxDYXRlZ29yeSQoKSkucGlwZShmaWx0ZXIodHVpSXNQcmVzZW50KSwgZmlyc3QoKSkpLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24sc29uYXJqcy9kaWZmZXJlbnQtdHlwZXMtY29tcGFyaXNvblxuICAgICAgICAgICAgdGFrZVdoaWxlKChwYXJlbnRDYXRlZ29yeSkgPT4gcGFyZW50Q2F0ZWdvcnkuaWQgIT09IHVuZGVmaW5lZCwgdHJ1ZSksXG4gICAgICAgICAgICB0b0FycmF5KCksXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby1taXNsZWFkaW5nLWFycmF5LXJldmVyc2VcbiAgICAgICAgICAgIG1hcCgoY2F0ZWdvcmllcykgPT4gY2F0ZWdvcmllcy5yZXZlcnNlKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9INC/0L7Qu9GD0YfQtdC90LjRjyDQuNGB0YLQvtGA0LjQuCDQuNC30LzQtdC90LXQvdC40Y8g0YbQtdC9INC90LAg0L/RgNC+0LTRg9C60YIg0LTQu9GPINC60LvQuNC10L3RgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0J/RgNC+0LTRg9C60YIsINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC30LDQv9GA0LDRiNC40LLQsNC10YLRgdGPINGG0LXQvdCwLlxuICAgICAqIEByZXR1cm5zINCY0YHRgtC+0YDQuNGPINC40LfQvNC10L3QtdC90LjRjyDRhtC10L0g0L3QsCDQv9GA0L7QtNGD0LrRgiDQtNC70Y8g0LrQu9C40LXQvdGC0LAg0LIg0YTQvtGA0LzQsNGC0LUge0BsaW5rIE9ic2VydmFibGV9INC40Lcg0LfQsNC/0YDQvtGB0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldFByaWNlSGlzdG9yeSQocHJvZHVjdDogU2NQcm9kdWN0KTogT2JzZXJ2YWJsZTxTY1ByaWNlSGlzdG9yeSB8IG51bGw+IHtcbiAgICAgICAgbGV0IGNhY2hlZEl0ZW0gPSB0aGlzLnByb2R1Y3RIaXN0b3J5TWFwLmdldChwcm9kdWN0LmlkLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIGlmICghY2FjaGVkSXRlbSkge1xuICAgICAgICAgICAgY2FjaGVkSXRlbSA9IG5ldyBTY0NhY2hlZEl0ZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUxpZmVUaW1lLmNhdGVnb3J5RGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAgICAgLmdldDxTY1ByaWNlSGlzdG9yeT4oYCR7dGhpcy51cmxzLmFwaVVybH0vY2F0YWxvZy9wcm9kdWN0cy8ke3Byb2R1Y3QuaWR9L3ByaWNlLWhpc3RvcnlgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhULFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHt9KSkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RIaXN0b3J5TWFwLnNldChwcm9kdWN0LmlkLnRvU3RyaW5nKCksIGNhY2hlZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uaXRlbSQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNC10YIg0LfQsNC/0YDQvtGBINC/0L7Qu9GD0YfQtdC90LjRjyDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LTQu9GPINC60L7QvdC60YDQtdGC0L3QvtC5INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXMg0J/QsNGA0LDQvNC10YLRgNGLINC30LDQv9GA0L7RgdCwINGC0L7QstCw0YDQvtCyINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UHJvZHVjdHMkKHBhcmFtczogU2NJQ2F0ZWdvcnlQcm9kdWN0UGFyYW1zKTogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXT47XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQsNC70L7Qs9CwINGBINC/0LDQs9C40L3QsNGG0LjQtdC5LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtcyDQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QsNCz0LjQvdCw0YbQuNC4INGC0L7QstCw0YDQvtCyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0cyQocGFyYW1zOiBTY0lDYXRlZ29yeVByb2R1Y3RQYWdpbmF0aW9uUGFyYW1zKTogT2JzZXJ2YWJsZTxTY0lQYWdpbmF0ZTxTY1Byb2R1Y3Q+PjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVkdW5kYW50LXR5cGUtY29uc3RpdHVlbnRzXG4gICAgcHVibGljIGdldFByb2R1Y3RzJChwYXJhbXM6IFNjSUNhdGVnb3J5UHJvZHVjdFBhcmFtcyB8IFNjSUNhdGVnb3J5UHJvZHVjdFBhZ2luYXRpb25QYXJhbXMpOiBPYnNlcnZhYmxlPFNjUHJvZHVjdFtdIHwgU2NJUGFnaW5hdGU8U2NQcm9kdWN0Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAuZ2V0PFNjSVBhZ2luYXRlPFNjSVByb2R1Y3REVE8+IHwgU2NJUHJvZHVjdERUT1tdPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzYCwge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgcGFyYW1zOiB0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnRvSHR0cFBhcmFtcyh7IC4uLnBhcmFtcyB9LCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2Z1bmN0aW9uLXJldHVybi10eXBlXG4gICAgICAgICAgICAgICAgbWFwKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgnbWV0YScgaW4gZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xvbmVEYXRhID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZURhdGEuZGF0YSA9IGNsb25lRGF0YS5kYXRhLm1hcCgoaXRlbSkgPT4gbmV3IFNjUHJvZHVjdChpdGVtKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGEgYXMgU2NJUGFnaW5hdGU8U2NQcm9kdWN0PjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLm1hcCgoaXRlbSwgaW5kZXgpID0+IG5ldyBTY1Byb2R1Y3QoaXRlbSwgaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtC70YPRh9C10L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40Lgg0Lgg0LrRjdGI0LjRgNGD0LXRgiDQtdCz0L4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zINCf0LDRgNCw0LzQtdGC0YDRiyDQt9Cw0L/RgNC+0YHQsCDRgtC+0LLQsNGA0L7QsiDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICovXG4gICAgcHVibGljIGdldFByb2R1Y3RzQ2F0ZWdvcnlDYWNoZWQkKHBhcmFtczogU2NJQ2F0ZWdvcnlQcm9kdWN0UGFyYW1zKTogT2JzZXJ2YWJsZTxTY1Byb2R1Y3RbXSB8IG51bGw+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBpZiAoIXBhcmFtcy5jYXRlZ29yeUlkICYmICFwYXJhbXMuY2F0ZWdvcnlTbHVnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ9Cd0LUg0YPQutCw0LfQsNC9IGlkL3NsdWcg0LrQsNGC0LXQs9C+0YDQuNC4LicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb24sQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hc3NpZ25tZW50LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBjb25zdCBjYWNoZWRLZXkgPSAocGFyYW1zLmNhdGVnb3J5U2x1ZyA/PyBwYXJhbXMuY2F0ZWdvcnlJZCkhO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbCxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgbGV0IGNhY2hlZEl0ZW0gPSB0aGlzLmNhdGVnb3J5UHJvZHVjdHNNYXAuZ2V0KGNhY2hlZEtleS50b1N0cmluZygpKTtcblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0pIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0gPSBuZXcgU2NDYWNoZWRJdGVtKHRoaXMuY2FjaGVMaWZlVGltZS5jYXRlZ29yeURhdGEsIHRoaXMuZ2V0UHJvZHVjdHMkKHBhcmFtcykpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50LEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeVByb2R1Y3RzTWFwLnNldChjYWNoZWRLZXkudG9TdHJpbmcoKSwgY2FjaGVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhY2hlZEl0ZW0uY2FjaGVkRGF0YUlzQWN0dWFsKCkpIHtcbiAgICAgICAgICAgIGNhY2hlZEl0ZW0udXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FjaGVkSXRlbS5pdGVtJDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINGD0LrQsNC30LDQvdC90L7QvCDQv9GA0L7QtNGD0LrRgtC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3RJZE9yU2x1ZyDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQuNC70Lggc2x1ZyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0RGF0YSQocHJvZHVjdElkT3JTbHVnOiBudW1iZXIgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPFNjUHJvZHVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTY0lQcm9kdWN0RFRPPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzLyR7cHJvZHVjdElkT3JTbHVnfWApLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHByb2R1Y3REVE8pID0+IG5ldyBTY1Byb2R1Y3QocHJvZHVjdERUTykpLFxuICAgICAgICAgICAgdGFwKChwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb2R1Y3RJZE9yU2x1ZyAmJiB0eXBlb2YgdGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpICE9PSB0eXBlb2YgcHJvZHVjdElkT3JTbHVnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdElkT3JTbHVnTWFwLnNldCh0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0ocHJvZHVjdCksIHByb2R1Y3RJZE9yU2x1Zyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJvZHVjdERhdGFDYWNoZWQkKHByb2R1Y3RJZE9yU2x1ZzogbnVtYmVyIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxTY1Byb2R1Y3QgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlRnJvbU1hcCA9IHRoaXMucHJvZHVjdElkT3JTbHVnTWFwLmdldChwcm9kdWN0SWRPclNsdWcpO1xuXG4gICAgICAgIGlmICh2YWx1ZUZyb21NYXApIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgcHJvZHVjdElkT3JTbHVnID0gdmFsdWVGcm9tTWFwO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy5wcm9kdWN0TWFwLmdldChwcm9kdWN0SWRPclNsdWcudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbSh0aGlzLmNhY2hlTGlmZVRpbWUuY2F0ZWdvcnlEYXRhLCB0aGlzLmdldFByb2R1Y3REYXRhJChwcm9kdWN0SWRPclNsdWcpKTtcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdE1hcC5zZXQocHJvZHVjdElkT3JTbHVnLnRvU3RyaW5nKCksIGNhY2hlZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtLmNhY2hlZERhdGFJc0FjdHVhbCgpKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtLnVwZGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uaXRlbSQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LfQsNC/0YDQvtGBINC90LAg0L/QvtC70YPRh9C10L3QuNC1INCz0LXQvdC10YDQuNGA0YPQtdC80L7Qs9C+INGE0LDQudC70LAg0L/RgNCw0LnRgS3Qu9C40YHRgtCwINCyINGE0L7RgNC80LDRgtC1IHtAbGluayBCbG9ifSwg0Lgg0LLRi9Cz0YDRg9C20LDQtdGCINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjiDQsiDQsdGA0LDRg9C30LXRgC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0eXBlIHtAbGluayBTY01pbWVUeXBlc30g0LfQsNC/0YDQsNGI0LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwLlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60LDRgtC10LPQvtGA0LjQuCwg0LTQu9GPINC60L7RgtC+0YDQvtC5INC30LDQs9GA0YPQttCw0LXRgtGB0Y8g0L/RgNCw0LnRgS3Qu9C40YHRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZG93bmxvYWRQcmljZSQodHlwZTogU2NNaW1lVHlwZXMsIGNhdGVnb3J5SWQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPEJsb2I+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb252ZXJ0ZXJzU2VydmljZS50b0h0dHBQYXJhbXMoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBPYmplY3Qua2V5cyhTY01pbWVUeXBlcylbT2JqZWN0LnZhbHVlcyhTY01pbWVUeXBlcykuaW5kZXhPZih0eXBlKV0sXG4gICAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGNhdGVnb3J5SWQgPz8gbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IG5vbk51bGxhYmxlOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL2Rvd25sb2FkYCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgcGFyYW1zOiBwYXJhbXMgfSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoYmxvYjogQmxvYikgPT4gbmV3IEJsb2IoW2Jsb2JdLCB7IHR5cGU6IHR5cGUgfSkpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJNZXRyaWthU2VydmljZS5lbWl0VXNlck1ldHJpa2FFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5jYXRhbG9nUHJpY2VEb3dubG9hZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeV9pZDogY2F0ZWdvcnlJZCA/PyAncm9vdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmljZV90eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQl9Cw0L/RgNC+0YEg0L3QsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyDQviDQv9C+0YHRgtGD0L/Qu9C10L3QuNC4INC/0YDQvtC00YPQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdElkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gZGF0YSDQlNCw0L3QvdGL0LUg0LTQu9GPINC30LDQv9GA0L7RgdCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQcm9kdWN0Tm90aWZ5V2hlbkluU3RvY2skKHByb2R1Y3RJZE9yU2x1Zzogc3RyaW5nIHwgbnVtYmVyLCBkYXRhOiBTY0lQcm9kdWN0Tm90aWZ5V2hlbkluU3RvY2spOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dW5kZWZpbmVkPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL3Byb2R1Y3RzLyR7cHJvZHVjdElkT3JTbHVnfS9zdG9jay1ub3RpZnlgLCBkYXRhKTtcbiAgICB9XG59XG4iXX0=