ctt-babylon 0.25.3 → 0.25.4

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.
@@ -185,7 +185,7 @@ export class BabylonBookingWidgetComponent {
185
185
  }
186
186
  // --- ENVÍO AL WIDGET ---
187
187
  if (Object.keys(marketingData).length > 0) {
188
- // Witbooking y motores similares suelen necesitar un "origin" genérico además de los parámetros opacos
188
+ // Siempre evaluamos el origin, porque si viene vacío, lo rellenamos con el orgánico o 'web'
189
189
  if (!marketingData['origin']) {
190
190
  if (marketingData['utm_source']) {
191
191
  marketingData['origin'] =
@@ -205,7 +205,42 @@ export class BabylonBookingWidgetComponent {
205
205
  else if (marketingData['ttclid']) {
206
206
  marketingData['origin'] = 'tiktok_ads';
207
207
  }
208
+ else {
209
+ // 5. RED DE SEGURIDAD ORGÁNICA FRONTEND
210
+ const referrer = document.referrer
211
+ ? document.referrer.toLowerCase()
212
+ : '';
213
+ if (referrer) {
214
+ if (referrer.includes('google.'))
215
+ marketingData['origin'] = 'google_organic';
216
+ else if (referrer.includes('bing.'))
217
+ marketingData['origin'] = 'bing_organic';
218
+ else if (referrer.includes('yahoo.'))
219
+ marketingData['origin'] = 'yahoo_organic';
220
+ else if (referrer.includes('duckduckgo.'))
221
+ marketingData['origin'] = 'duckduckgo_organic';
222
+ else if (referrer.includes('yandex.'))
223
+ marketingData['origin'] = 'yandex_organic';
224
+ else if (referrer.includes('baidu.'))
225
+ marketingData['origin'] = 'baidu_organic';
226
+ else if (referrer.includes('ecosia.'))
227
+ marketingData['origin'] = 'ecosia_organic';
228
+ else if (referrer.includes('qwant.'))
229
+ marketingData['origin'] = 'qwant_organic';
230
+ else if (referrer.includes('ask.'))
231
+ marketingData['origin'] = 'ask_organic';
232
+ else if (referrer.includes('naver.'))
233
+ marketingData['origin'] = 'naver_organic';
234
+ else
235
+ marketingData['origin'] = 'referral_other'; // Tráfico desde otra web
236
+ }
237
+ else {
238
+ // Tráfico directo (URL tecleada a mano o referrer oculto)
239
+ marketingData['origin'] = 'web'; // Valor por defecto seguro para Witbooking
240
+ }
241
+ }
208
242
  }
243
+ // El evento se dispara SIEMPRE, ya que como mínimo llevará { origin: 'web' }
209
244
  setTimeout(() => {
210
245
  const event = new CustomEvent('widgetUpdateParams', {
211
246
  detail: marketingData,
@@ -413,4 +448,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
413
448
  }], monthsToDisplay: [{
414
449
  type: Input
415
450
  }] } });
416
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDOzs7QUFXdkIsSUFBSSxtQkFBbUIsR0FBeUIsSUFBSSxDQUFDO0FBRXJELFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDekIsSUFBSSxtQkFBbUI7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBRXBELG1CQUFtQixHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hELDJCQUEyQjtRQUMzQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFO1lBQ3RELE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUNiLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENB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ZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHckMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYWZ0ZXJOZXh0UmVuZGVyLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhYnlsb25XaWRnZXRTZWFyY2hMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFieWxvbi13aWRnZXQtc2VhcmNoLWxvYWRlci5zZXJ2aWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBXaWRnZXRTZWFyY2g6IGFueTtcbiAgICAgICAgaW5pdGlhbGl6ZVdpZGdldFNlYXJjaD86ICgpID0+IHZvaWQ7XG4gICAgICAgIGdldFdpZGdldEluc3RhbmNlPzogKGlkOiBzdHJpbmcpID0+IGFueTtcbiAgICB9XG59XG5cbmxldCB3aWRnZXRTY3JpcHRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGxvYWRPbmNlKHNyYzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHdpZGdldFNjcmlwdFByb21pc2UpIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xuXG4gICAgd2lkZ2V0U2NyaXB0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gU2kgeWEgZXhpc3RlLCByZXNvbHZlbW9zXG4gICAgICAgIGlmICh3aW5kb3cuV2lkZ2V0U2VhcmNoIHx8IHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHMuc3JjID0gc3JjO1xuICAgICAgICBzLmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgcy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgIHMub25lcnJvciA9ICgpID0+XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdObyBzZSBwdWRvIGNhcmdhciBlbCBzY3JpcHQgZGVsIHdpZGdldCcpKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWJvb2tpbmctd2lkZ2V0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICN3aWRnZXRDb250YWluZXJcbiAgICAgICAgICAgIFtpZF09XCJ3aWRnZXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJvb2staWRdPVwiaG90ZWxJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWhvdGVsXT1cInRpY2tlclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWVuZ2luZV09XCJlbmdpbmVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWN1cnJlbmN5XT1cImN1cnJlbmN5XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWxheW91dF09XCJsYXlvdXRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1sYXlvdXQtY29sdW1uXT1cImxheW91dENvbHVtblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlZmF1bHQtYWR1bHRzXT1cImRlZmF1bHRBZHVsdHNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWZhdWx0LWp1bmlvcl09XCJkZWZhdWx0SnVuaW9yXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZGVmYXVsdC1jaGlsZHJlbl09XCJkZWZhdWx0Q2hpbGRyZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1zaG93LXByaWNlXT1cInNob3dQcmljZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctaG90ZWwtc2VsZWN0b3JdPVwic2hvd0hvdGVsU2VsZWN0b3JcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1zaG93LXByb21vLWNvZGVdPVwic2hvd1Byb21vQ29kZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctY2hpbGQtYWdlc109XCJzaG93Q2hpbGRBZ2VzXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LWNoaWxkcmVuXT1cIm1heENoaWxkcmVuXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LWp1bmlvcl09XCJtYXhKdW5pb3JcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1iYXNlLXVybF09XCJiYXNlVXJsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWNoYWluXT1cInVybENoYWluXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWhvdGVsXT1cInVybEhvdGVsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnV0dG9uLXRleHRdPVwiYnV0dG9uVGV4dFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW1heC1yb29tc109XCJtYXhSb29tc1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctYWxsLWhvdGVscy1vcHRpb25dPVwic2hvd0FsbEhvdGVsc09wdGlvblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRhcmdldC1ibGFua109XCJ0YXJnZXRCbGFua1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWhvdGVsLXRleHRdPVwiaG90ZWxUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWluLWRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW1heC1kYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNwbGF5LW1vbnRoc109XCJtb250aHNUb0Rpc3BsYXlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkJvb2tpbmdXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ3dpZGdldENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgd2lkZ2V0Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBASW5wdXQoKSB3aWRnZXRJZCA9ICd3aWRnZXQtc2VhcmNoJztcbiAgICBASW5wdXQoKSBob3RlbElkID0gJ2FsZWNhZCc7XG4gICAgQElucHV0KCkgdGlja2VyID0gJ2hvdGVsbWFyaXN0ZWwuY29tJztcbiAgICBASW5wdXQoKSB0eXBlOiAnY2hhaW4nIHwgJ2hvdGVsJyB8IHN0cmluZyA9ICdjaGFpbic7XG4gICAgQElucHV0KCkgZW5naW5lOiAnd2l0Ym9va2luZycgfCAncm9pYmFjaycgfCBzdHJpbmcgPSAnd2l0Ym9va2luZyc7XG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgfCBzdHJpbmcgPSAnbGlnaHQnO1xuICAgIEBJbnB1dCgpIGN1cnJlbmN5ID0gJ0VVUic7XG4gICAgQElucHV0KCkgbG9jYWxlPzogc3RyaW5nID0gJ2VzLUVTJztcbiAgICBASW5wdXQoKSBsYXlvdXQ6ICdpbmxpbmUnIHwgJ2NvbHVtbicgfCBzdHJpbmcgPSAnaW5saW5lJztcbiAgICBASW5wdXQoKSBkZWZhdWx0QWR1bHRzID0gMjtcbiAgICBASW5wdXQoKSBkZWZhdWx0Q2hpbGRyZW4gPSAwO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRKdW5pb3IgPSAwO1xuICAgIEBJbnB1dCgpIHNob3dQcmljZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dIb3RlbFNlbGVjdG9yID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93UHJvbW9Db2RlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93Q2hpbGRBZ2VzID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBtYXhDaGlsZHJlbj86IG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhKdW5pb3I/OiBudW1iZXI7XG4gICAgQElucHV0KCkgYmFzZVVybD86IHN0cmluZztcbiAgICBASW5wdXQoKSB1cmxDaGFpbj86IHN0cmluZztcbiAgICBASW5wdXQoKSB1cmxIb3RlbCA9ICdob3RlbCc7XG4gICAgQElucHV0KCkgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXlvdXRDb2x1bW4/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4Um9vbXM/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd0FsbEhvdGVsc09wdGlvbj86IHN0cmluZztcbiAgICBASW5wdXQoKSB0YXJnZXRCbGFuaz86IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG90ZWxUZXh0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heERhdGU/OiBzdHJpbmc7IC8qIDIwMjgtMDEtMDEgKi9cbiAgICBASW5wdXQoKSBtaW5EYXRlPzogc3RyaW5nOyAvKiAyMDI4LTAxLTAxICovXG5cbiAgICBASW5wdXQoKSBmbGFnVGltZT86IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1vbnRoc1RvRGlzcGxheT86IG51bWJlciA9IDE7XG5cbiAgICBwcml2YXRlIG1vdW50ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcGVuZGluZ1RpY2tlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSByZXRyeVRpbWVvdXQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IG9iamVjdCxcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgbG9hZGVyOiBCYWJ5bG9uV2lkZ2V0U2VhcmNoTG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICAgICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvL1dhaXQgZm9yIGlucHV0c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW91bnRlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDirIfvuI8gUE9OIEFRVcONIGxhIFVSTCByZWFsIGRlbCBzY3JpcHQgZGUgV2l0Ym9va2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnVGltZSA/IDMwMCA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdW50ZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBlbCA9IHRoaXMud2lkZ2V0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgLy8gT3BjacOzbiBBIChzaSBleGlzdGUpOiBpbml0IGdsb2JhbCBtYW51YWxcbiAgICAgICAgaWYgKHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICB3aW5kb3cuaW5pdGlhbGl6ZVdpZGdldFNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9wY2nDs24gQjogY29uc3RydWN0b3IgKFNvbG8gZW50cmEgc2kgbm8gZXhpc3RlIGxhIEEpXG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5XaWRnZXRTZWFyY2gpIHtcbiAgICAgICAgICAgIG5ldyB3aW5kb3cuV2lkZ2V0U2VhcmNoKGVsLCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluamVjdE1hcmtldGluZ1BhcmFtcyhlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmplY3RNYXJrZXRpbmdQYXJhbXMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gUFJPVEVDQ0nDk04gU1NSOiBTaSBlc3RhbW9zIGVuIGVsIHNlcnZpZG9yIGRlIE5vZGUsIGFib3J0YW1vcyBwYXJhIGV2aXRhciBjdWVsZ3Vlc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAgICAgdHlwZW9mIHNlc3Npb25TdG9yYWdlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDEuIERJQ0NJT05BUklPUyBERSBOT01FTkNMQVRVUkFTIEVTVMOBTkRBUlxuICAgICAgICAvLyBDbGljIElEcyBhdXRvbcOhdGljb3MgZGUgbGFzIHByaW5jaXBhbGVzIHBsYXRhZm9ybWFzIHB1YmxpY2l0YXJpYXNbY2l0ZTogMTZdXG4gICAgICAgIGNvbnN0IENMSUNLX0lEUyA9IFtcbiAgICAgICAgICAgICdnY2xpZCcsXG4gICAgICAgICAgICAnZ2JyYWlkJyxcbiAgICAgICAgICAgICd3YnJhaWQnLFxuICAgICAgICAgICAgJ2RjbGlkJywgLy8gR29vZ2xlW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ21zY2xraWQnLCAvLyBNaWNyb3NvZnQgLyBCaW5nW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ3ZtY2lkJywgLy8gWWFob29bY2l0ZTogMTZdXG4gICAgICAgICAgICAneWNsaWQnLFxuICAgICAgICAgICAgJ3ltY2xpZCcsIC8vIFlhbmRleFtjaXRlOiAxNl1cbiAgICAgICAgICAgICdmYmNsaWQnLCAvLyBNZXRhIChGYWNlYm9vaywgSW5zdGFncmFtLCBXaGF0c0FwcClbY2l0ZTogMTZdXG4gICAgICAgICAgICAndHRjbGlkJywgLy8gVGlrVG9rW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2xpX2ZhdF9pZCcsIC8vIExpbmtlZEluW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ3R3Y2xpZCcsIC8vIFggKFR3aXR0ZXIpW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2VwaWsnLCAvLyBQaW50ZXJlc3RbY2l0ZTogMTZdXG4gICAgICAgICAgICAncmR0X2NpZCcsIC8vIFJlZGRpdFtjaXRlOiAxNl1cbiAgICAgICAgICAgICdTY0NpZCcsIC8vIFNuYXBjaGF0W2NpdGU6IDE2XVxuICAgICAgICAgICAgJ3FjbGlkJywgLy8gUXVvcmFbY2l0ZTogMTZdXG4gICAgICAgICAgICAnc2knLCAvLyBZb3VUdWJlW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2F3Y2xpZCcsIC8vIEFtYXpvbiBBZHNbY2l0ZTogMTZdXG4gICAgICAgICAgICAndGJsY2knLCAvLyBUYWJvb2xhW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2RpY2JvJywgLy8gT3V0YnJhaW5bY2l0ZTogMTZdXG4gICAgICAgICAgICAnYWRfaWQnLCAvLyBBZFJvbGxbY2l0ZTogMTZdXG4gICAgICAgICAgICAnaXJjbGlja2lkJyxcbiAgICAgICAgICAgICdjamV2ZW50JywgLy8gQWZpbGlhZG9zIChJbXBhY3QsIENKKVtjaXRlOiAxNl1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBFc3TDoW5kYXIgbWFudWFsIFVUTVxuICAgICAgICBjb25zdCBVVE1TID0gW1xuICAgICAgICAgICAgJ3V0bV9zb3VyY2UnLFxuICAgICAgICAgICAgJ3V0bV9tZWRpdW0nLFxuICAgICAgICAgICAgJ3V0bV9jYW1wYWlnbicsXG4gICAgICAgICAgICAndXRtX3Rlcm0nLFxuICAgICAgICAgICAgJ3V0bV9jb250ZW50JyxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBtYXJrZXRpbmdEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cbiAgICAgICAgLy8gLS0tIENBUEEgMTogRVNDQU5FTyBERSBMQSBVUkwgLS0tXG4gICAgICAgIFsuLi5DTElDS19JRFMsIC4uLlVUTVMsICdvcmlnaW4nXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSBtYXJrZXRpbmdEYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gLS0tIENBUEEgMjogRVNDQU5FTyBERSBDT09LSUVTIChTaSBsYSBVUkwgZXN0w6EgbGltcGlhIHBlcm8gaGF5IHJhc3RybyBwdWJsaWNpdGFyaW8pIC0tLVxuICAgICAgICBjb25zdCBnZXRDb29raWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKCcoXnwgKScgKyBuYW1lICsgJz0oW147XSspJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcmtldGluZ0RhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gR29vZ2xlIEFkcyBndWFyZGEgc3UgR0NMSUQgZW4gbGEgY29va2llIF9nY2xfYXcgKGZvcm1hdG86IEdDTC50aW1lc3RhbXAuaWQpXG4gICAgICAgICAgICBjb25zdCBnY2xBdyA9IGdldENvb2tpZSgnX2djbF9hdycpO1xuICAgICAgICAgICAgaWYgKGdjbEF3ICYmIGdjbEF3LnNwbGl0KCcuJykubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydnY2xpZCddID0gZ2NsQXcuc3BsaXQoJy4nKVsyXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRmFjZWJvb2sgZ3VhcmRhIHN1IEZCQ0xJRCBlbiBsYSBjb29raWUgX2ZicFxuICAgICAgICAgICAgY29uc3QgZmJwID0gZ2V0Q29va2llKCdfZmJwJyk7XG4gICAgICAgICAgICBpZiAoZmJwKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZmJjbGlkJ10gPSBmYnA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gQ0FQQSAzOiBFU0NBTkVPIERFTCBEQVRBTEFZRVIgKElueWVjY2lvbmVzIHNpbGVuY2lvc2FzIGRlIFRhZyBNYW5hZ2VyKSAtLS1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAod2luZG93IGFzIGFueSkuZGF0YUxheWVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZGwgPSAod2luZG93IGFzIGFueSkuZGF0YUxheWVyIGFzIGFueVtdO1xuICAgICAgICAgICAgLy8gUmVjb3JyZW1vcyBkZSBtw6FzIHJlY2llbnRlIGEgbcOhcyBhbnRpZ3VvXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGxbaV07XG4gICAgICAgICAgICAgICAgWy4uLkNMSUNLX0lEUywgLi4uVVRNUywgJ3RyYWZmaWNfc291cmNlJywgJ29yaWdpbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtW2tleV0gJiYgIW1hcmtldGluZ0RhdGFba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcGVhciB1biBub21icmUgaW50ZXJubyAoZWouIHRyYWZmaWNfc291cmNlKSBhbCBlc3TDoW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbEtleSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PT0gJ3RyYWZmaWNfc291cmNlJyA/ICdvcmlnaW4nIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbZmluYWxLZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID4gMCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gQ0FQQSA0OiBSRUNVUEVSQVIgLyBHVUFSREFSIFNFU0nDk04gKFByb3RlY2Npw7NuIFNQQSBlbiBBbmd1bGFyKSAtLS1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcmtldGluZ0RhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gTm8gaGF5IGRhdG9zIG51ZXZvcywgcmVjdXBlcmFtb3MgdG9kbyBsbyBxdWUgdGVuZ2EgcHJlZmlqbyAnbWt0XydcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZEtleXMgPSBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSkuZmlsdGVyKChrKSA9PlxuICAgICAgICAgICAgICAgIGsuc3RhcnRzV2l0aCgnbWt0XycpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RvcmVkS2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxLZXkgPSBrLnJlcGxhY2UoJ21rdF8nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsKSBtYXJrZXRpbmdEYXRhW29yaWdpbmFsS2V5XSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSGF5IGRhdG9zIG51ZXZvcywgbG9zIGd1YXJkYW1vcyBwYXJhIGxhIHByw7N4aW1hIHZleiBxdWUgbmF2ZWd1ZSBwb3IgbGEgd2ViXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG1hcmtldGluZ0RhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBta3RfJHtrZXl9YCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICdBY2Nlc28gYSBzZXNzaW9uU3RvcmFnZSBibG9xdWVhZG8gcG9yIGVsIG5hdmVnYWRvci4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBFTlbDjU8gQUwgV0lER0VUIC0tLVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gV2l0Ym9va2luZyB5IG1vdG9yZXMgc2ltaWxhcmVzIHN1ZWxlbiBuZWNlc2l0YXIgdW4gXCJvcmlnaW5cIiBnZW7DqXJpY28gYWRlbcOhcyBkZSBsb3MgcGFyw6FtZXRyb3Mgb3BhY29zXG4gICAgICAgICAgICBpZiAoIW1hcmtldGluZ0RhdGFbJ29yaWdpbiddKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcmtldGluZ0RhdGFbJ3V0bV9zb3VyY2UnXSkge1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWyd1dG1fc291cmNlJ10gK1xuICAgICAgICAgICAgICAgICAgICAgICAgKG1hcmtldGluZ0RhdGFbJ3V0bV9tZWRpdW0nXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYF8ke21hcmtldGluZ0RhdGFbJ3V0bV9tZWRpdW0nXX1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZ2NsaWQnXSB8fFxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWyd3YnJhaWQnXSB8fFxuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydnYnJhaWQnXVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdnb29nbGVfY3BjJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtldGluZ0RhdGFbJ2ZiY2xpZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ21ldGFfYWRzJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtldGluZ0RhdGFbJ3R0Y2xpZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ3Rpa3Rva19hZHMnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3dpZGdldFVwZGF0ZVBhcmFtcycsIHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBtYXJrZXRpbmdEYXRhLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1sndGlja2VyJ10pIHtcbiAgICAgICAgICAgIC8vIEd1YXJkYW1vcyBzaWVtcHJlIGVsIMOaTFRJTU8gdmFsb3IgcXVlIEFuZ3VsYXIgbm9zIG1hbmRlXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdUaWNrZXIgPSBjaGFuZ2VzWyd0aWNrZXInXS5jdXJyZW50VmFsdWUgfHwgJ2FsbC1ob3RlbHMnO1xuXG4gICAgICAgICAgICAvLyBEaXNwYXJhbW9zIGxhIGFjdHVhbGl6YWNpw7NuXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXaWRnZXRVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZXRyeVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJXaWRnZXRVcGRhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yZXRyeVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLndpZGdldENvbnRhaW5lclxuICAgICAgICAgICAgICAgID8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyRWwpIHJldHVybjtcblxuICAgICAgICAgICAgLy8gMS4gRXNwZXJhbW9zIGEgcXVlIGVsIHdpZGdldCBoYXlhIGRlc2NhcmdhZG8geSBkaWJ1amFkbyBsb3MgaG90ZWxlcyBlbiBlbCBET01cbiAgICAgICAgICAgIGNvbnN0IGhvdGVsT3B0aW9ucyA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ob3RlbC1vcHRpb24nKTtcblxuICAgICAgICAgICAgaWYgKGhvdGVsT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VGlja2VyID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGlja2VyICYmIHRoaXMucGVuZGluZ1RpY2tlcj8udHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBlbmRpbmdUaWNrZXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYWxsLWhvdGVscyc7XG5cbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uVG9DbGljazogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIDIuIEJ1c2NhbW9zIGxhIG9wY2nDs24gZGUgaG90ZWwgcmVhbCBxdWUgY29pbmNpZGEgY29uIGVsIHRpY2tlclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG90ZWxPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IGhvdGVsT3B0aW9uc1tpXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0SWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmdldEF0dHJpYnV0ZSgnZGF0YS1ob3RlbC1pZCcpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENvaW5jaWRlbmNpYSBleGFjdGEgbyBwYXJjaWFsIChwb3Igc2kgZWwgd2lkZ2V0IGxlIGHDsWFkZSBzdWZpam9zIGFsIElEKVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRJZCA9PT0gdGFyZ2V0VGlja2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRJZC5pbmNsdWRlcyh0YXJnZXRUaWNrZXIpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVG9DbGljayA9IG9wdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvblRvQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uVG9DbGljay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQcO6biBubyBzZSBoYW4gZGlidWphZG8gbGFzIG9wY2lvbmVzLCBlbCBtb3RvciBzaWd1ZSBjYXJnYW5kby4uLlxuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy50cmlnZ2VyV2lkZ2V0VXBkYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIDMwMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tYm9va2luZy13aWRnZXQvYmFieWxvbi1ib29raW5nLXdpZGdldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsTUFBTSxFQUNOLEtBQUssRUFHTCxXQUFXLEVBRVgsU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDOzs7QUFXdkIsSUFBSSxtQkFBbUIsR0FBeUIsSUFBSSxDQUFDO0FBRXJELFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDekIsSUFBSSxtQkFBbUI7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBRXBELG1CQUFtQixHQUFHLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hELDJCQUEyQjtRQUMzQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFO1lBQ3RELE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUNiLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7UUFDaEUsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLG1CQUFtQixDQUFDO0FBQy9CLENBQUM7QUF5Q0QsTUFBTSxPQUFPLDZCQUE2QjtJQTBDdEMsWUFDaUMsVUFBa0IsRUFDdkMsSUFBWSxFQUNaLE1BQXdDO1FBRm5CLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLFdBQU0sR0FBTixNQUFNLENBQWtDO1FBekMzQyxhQUFRLEdBQUcsZUFBZSxDQUFDO1FBQzNCLFlBQU8sR0FBRyxRQUFRLENBQUM7UUFDbkIsV0FBTSxHQUFHLG1CQUFtQixDQUFDO1FBQzdCLFNBQUksR0FBK0IsT0FBTyxDQUFDO1FBQzNDLFdBQU0sR0FBc0MsWUFBWSxDQUFDO1FBQ3pELFVBQUssR0FBOEIsT0FBTyxDQUFDO1FBQzNDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFZLE9BQU8sQ0FBQztRQUMxQixXQUFNLEdBQWlDLFFBQVEsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLHNCQUFpQixHQUFHLElBQUksQ0FBQztRQUN6QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUtyQixhQUFRLEdBQUcsT0FBTyxDQUFDO1FBVW5CLGFBQVEsR0FBYSxJQUFJLENBQUM7UUFDMUIsb0JBQWUsR0FBWSxDQUFDLENBQUM7UUFFOUIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFReEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztZQUFFLE9BQU87UUFFM0MsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNqQixVQUFVLENBQ04sR0FBRyxFQUFFO2dCQUNELGlCQUFpQjtnQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDbkMsSUFBSSxJQUFJLENBQUMsT0FBTzt3QkFBRSxPQUFPO29CQUV6QixtREFBbUQ7b0JBQ25ELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFFekIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsRUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDMUIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQztRQUU5QywyQ0FBMkM7UUFDM0MsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUU7WUFDL0IsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDbkM7UUFDRCx1REFBdUQ7YUFDbEQsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQzFCLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQW9CO1FBQzlDLG9GQUFvRjtRQUNwRixJQUNJLE9BQU8sTUFBTSxLQUFLLFdBQVc7WUFDN0IsT0FBTyxjQUFjLEtBQUssV0FBVyxFQUN2QztZQUNFLE9BQU87U0FDVjtRQUVELDRDQUE0QztRQUM1Qyw4RUFBOEU7UUFDOUUsTUFBTSxTQUFTLEdBQUc7WUFDZCxPQUFPO1lBQ1AsUUFBUTtZQUNSLFFBQVE7WUFDUixPQUFPO1lBQ1AsU0FBUztZQUNULE9BQU87WUFDUCxPQUFPO1lBQ1AsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsV0FBVztZQUNYLFFBQVE7WUFDUixNQUFNO1lBQ04sU0FBUztZQUNULE9BQU87WUFDUCxPQUFPO1lBQ1AsSUFBSTtZQUNKLFFBQVE7WUFDUixPQUFPO1lBQ1AsT0FBTztZQUNQLE9BQU87WUFDUCxXQUFXO1lBQ1gsU0FBUyxFQUFFLG1DQUFtQztTQUNqRCxDQUFDO1FBRUYsc0JBQXNCO1FBQ3RCLE1BQU0sSUFBSSxHQUFHO1lBQ1QsWUFBWTtZQUNaLFlBQVk7WUFDWixjQUFjO1lBQ2QsVUFBVTtZQUNWLGFBQWE7U0FDaEIsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUEyQixFQUFFLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzRCxvQ0FBb0M7UUFDcEMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM5QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSztnQkFBRSxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMEZBQTBGO1FBQzFGLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQy9CLElBQUksTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQzFDLENBQUM7WUFDRixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekMsOEVBQThFO1lBQzlFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ3ZDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1lBRUQsOENBQThDO1lBQzlDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLEdBQUcsRUFBRTtnQkFDTCxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ2pDO1NBQ0o7UUFFRCxpRkFBaUY7UUFDakYsSUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3RDLE1BQWMsQ0FBQyxTQUFTLEVBQzNCO1lBQ0UsTUFBTSxFQUFFLEdBQUksTUFBYyxDQUFDLFNBQWtCLENBQUM7WUFDOUMsMkNBQTJDO1lBQzNDLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuQixDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FDdkQsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDSixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDbEMsNERBQTREO3dCQUM1RCxNQUFNLFFBQVEsR0FDVixHQUFHLEtBQUssZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3dCQUM5QyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN2QztnQkFDTCxDQUFDLENBQ0osQ0FBQztnQkFDRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQUUsTUFBTTthQUNwRDtTQUNKO1FBRUQseUVBQXlFO1FBQ3pFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLG9FQUFvRTtZQUNwRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3hELENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQ3ZCLENBQUM7WUFDRixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEdBQUc7b0JBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCw2RUFBNkU7WUFDN0UsSUFBSTtnQkFDQSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ25ELGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxJQUFJLENBQ1IscURBQXFELENBQ3hELENBQUM7YUFDTDtTQUNKO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZDLDRGQUE0RjtZQUM1RixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMxQixJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDN0IsYUFBYSxDQUFDLFFBQVEsQ0FBQzt3QkFDbkIsYUFBYSxDQUFDLFlBQVksQ0FBQzs0QkFDM0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO2dDQUN4QixDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0NBQ25DLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDakI7cUJBQU0sSUFDSCxhQUFhLENBQUMsT0FBTyxDQUFDO29CQUN0QixhQUFhLENBQUMsUUFBUSxDQUFDO29CQUN2QixhQUFhLENBQUMsUUFBUSxDQUFDLEVBQ3pCO29CQUNFLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUM7aUJBQzFDO3FCQUFNLElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNoQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUN4QztxQkFBTSxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDaEMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0gsd0NBQXdDO29CQUN4QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUTt3QkFDOUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO3dCQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUVULElBQUksUUFBUSxFQUFFO3dCQUNWLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7NEJBQzVCLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs2QkFDMUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzs0QkFDL0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQzs2QkFDeEMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzs0QkFDaEMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQzs2QkFDekMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQzs0QkFDckMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDOzZCQUM5QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDOzRCQUNqQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7NkJBQzFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7NEJBQ2hDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7NkJBQ3pDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7NEJBQ2pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQzs2QkFDMUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzs0QkFDaEMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQzs2QkFDekMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzs0QkFDOUIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQzs2QkFDdkMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzs0QkFDaEMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQzs7NEJBQ3pDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLHlCQUF5QjtxQkFDN0U7eUJBQU07d0JBQ0gsMERBQTBEO3dCQUMxRCxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsMkNBQTJDO3FCQUMvRTtpQkFDSjthQUNKO1lBRUQsNkVBQTZFO1lBQzdFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7b0JBQ2hELE1BQU0sRUFBRSxhQUFhO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkIsMERBQTBEO1lBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUM7WUFFcEUsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNuQztJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWU7Z0JBQ3BDLEVBQUUsYUFBNEIsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPO1lBRXpCLGdGQUFnRjtZQUNoRixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFFbkUsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekIsTUFBTSxZQUFZLEdBQ2QsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtvQkFDbEMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFFdkIsSUFBSSxhQUFhLEdBQXVCLElBQUksQ0FBQztnQkFFN0MsaUVBQWlFO2dCQUNqRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztvQkFDM0MsTUFBTSxLQUFLLEdBQ1AsR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBRTNELDBFQUEwRTtvQkFDMUUsSUFDSSxLQUFLLEtBQUssWUFBWTt3QkFDdEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFDOUI7d0JBQ0UsYUFBYSxHQUFHLEdBQUcsQ0FBQzt3QkFDcEIsTUFBTTtxQkFDVDtpQkFDSjtnQkFFRCxJQUFJLGFBQWEsRUFBRTtvQkFDZixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3pCO2FBQ0o7aUJBQU07Z0JBQ0gsa0VBQWtFO2dCQUNsRSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FDMUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQ2hDLEdBQUcsQ0FDTixDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBblZRLDZCQUE2QixrQkEyQzFCLFdBQVc7bUdBM0NkLDZCQUE2Qix1Z0NBcEM1Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQWtDVDs7NEZBRVEsNkJBQTZCO2tCQXZDekMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUN0QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBa0NUO2lCQUNKOzswQkE0Q1EsTUFBTTsyQkFBQyxXQUFXOzZHQXpDdkIsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHckMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYWZ0ZXJOZXh0UmVuZGVyLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhYnlsb25XaWRnZXRTZWFyY2hMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFieWxvbi13aWRnZXQtc2VhcmNoLWxvYWRlci5zZXJ2aWNlJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBXaWRnZXRTZWFyY2g6IGFueTtcbiAgICAgICAgaW5pdGlhbGl6ZVdpZGdldFNlYXJjaD86ICgpID0+IHZvaWQ7XG4gICAgICAgIGdldFdpZGdldEluc3RhbmNlPzogKGlkOiBzdHJpbmcpID0+IGFueTtcbiAgICB9XG59XG5cbmxldCB3aWRnZXRTY3JpcHRQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGxvYWRPbmNlKHNyYzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHdpZGdldFNjcmlwdFByb21pc2UpIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xuXG4gICAgd2lkZ2V0U2NyaXB0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgLy8gU2kgeWEgZXhpc3RlLCByZXNvbHZlbW9zXG4gICAgICAgIGlmICh3aW5kb3cuV2lkZ2V0U2VhcmNoIHx8IHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHMuc3JjID0gc3JjO1xuICAgICAgICBzLmFzeW5jID0gdHJ1ZTtcbiAgICAgICAgcy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICAgIHMub25lcnJvciA9ICgpID0+XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdObyBzZSBwdWRvIGNhcmdhciBlbCBzY3JpcHQgZGVsIHdpZGdldCcpKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB3aWRnZXRTY3JpcHRQcm9taXNlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWJvb2tpbmctd2lkZ2V0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICN3aWRnZXRDb250YWluZXJcbiAgICAgICAgICAgIFtpZF09XCJ3aWRnZXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJvb2staWRdPVwiaG90ZWxJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWhvdGVsXT1cInRpY2tlclwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXR5cGVdPVwidHlwZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWVuZ2luZV09XCJlbmdpbmVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aGVtZV09XCJ0aGVtZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWN1cnJlbmN5XT1cImN1cnJlbmN5XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWxheW91dF09XCJsYXlvdXRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1sYXlvdXQtY29sdW1uXT1cImxheW91dENvbHVtblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRlZmF1bHQtYWR1bHRzXT1cImRlZmF1bHRBZHVsdHNcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kZWZhdWx0LWp1bmlvcl09XCJkZWZhdWx0SnVuaW9yXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZGVmYXVsdC1jaGlsZHJlbl09XCJkZWZhdWx0Q2hpbGRyZW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1zaG93LXByaWNlXT1cInNob3dQcmljZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctaG90ZWwtc2VsZWN0b3JdPVwic2hvd0hvdGVsU2VsZWN0b3JcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1zaG93LXByb21vLWNvZGVdPVwic2hvd1Byb21vQ29kZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctY2hpbGQtYWdlc109XCJzaG93Q2hpbGRBZ2VzXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LWNoaWxkcmVuXT1cIm1heENoaWxkcmVuXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWF4LWp1bmlvcl09XCJtYXhKdW5pb3JcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1iYXNlLXVybF09XCJiYXNlVXJsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWNoYWluXT1cInVybENoYWluXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdXJsLWhvdGVsXT1cInVybEhvdGVsXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtYnV0dG9uLXRleHRdPVwiYnV0dG9uVGV4dFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW1heC1yb29tc109XCJtYXhSb29tc1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXNob3ctYWxsLWhvdGVscy1vcHRpb25dPVwic2hvd0FsbEhvdGVsc09wdGlvblwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRhcmdldC1ibGFua109XCJ0YXJnZXRCbGFua1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWhvdGVsLXRleHRdPVwiaG90ZWxUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbWluLWRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW1heC1kYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1kaXNwbGF5LW1vbnRoc109XCJtb250aHNUb0Rpc3BsYXlcIlxuICAgICAgICA+PC9kaXY+XG4gICAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkJvb2tpbmdXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ3dpZGdldENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgd2lkZ2V0Q29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBASW5wdXQoKSB3aWRnZXRJZCA9ICd3aWRnZXQtc2VhcmNoJztcbiAgICBASW5wdXQoKSBob3RlbElkID0gJ2FsZWNhZCc7XG4gICAgQElucHV0KCkgdGlja2VyID0gJ2hvdGVsbWFyaXN0ZWwuY29tJztcbiAgICBASW5wdXQoKSB0eXBlOiAnY2hhaW4nIHwgJ2hvdGVsJyB8IHN0cmluZyA9ICdjaGFpbic7XG4gICAgQElucHV0KCkgZW5naW5lOiAnd2l0Ym9va2luZycgfCAncm9pYmFjaycgfCBzdHJpbmcgPSAnd2l0Ym9va2luZyc7XG4gICAgQElucHV0KCkgdGhlbWU6ICdsaWdodCcgfCAnZGFyaycgfCBzdHJpbmcgPSAnbGlnaHQnO1xuICAgIEBJbnB1dCgpIGN1cnJlbmN5ID0gJ0VVUic7XG4gICAgQElucHV0KCkgbG9jYWxlPzogc3RyaW5nID0gJ2VzLUVTJztcbiAgICBASW5wdXQoKSBsYXlvdXQ6ICdpbmxpbmUnIHwgJ2NvbHVtbicgfCBzdHJpbmcgPSAnaW5saW5lJztcbiAgICBASW5wdXQoKSBkZWZhdWx0QWR1bHRzID0gMjtcbiAgICBASW5wdXQoKSBkZWZhdWx0Q2hpbGRyZW4gPSAwO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRKdW5pb3IgPSAwO1xuICAgIEBJbnB1dCgpIHNob3dQcmljZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dIb3RlbFNlbGVjdG9yID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93UHJvbW9Db2RlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93Q2hpbGRBZ2VzID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBtYXhDaGlsZHJlbj86IG51bWJlcjtcbiAgICBASW5wdXQoKSBtYXhKdW5pb3I/OiBudW1iZXI7XG4gICAgQElucHV0KCkgYmFzZVVybD86IHN0cmluZztcbiAgICBASW5wdXQoKSB1cmxDaGFpbj86IHN0cmluZztcbiAgICBASW5wdXQoKSB1cmxIb3RlbCA9ICdob3RlbCc7XG4gICAgQElucHV0KCkgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXlvdXRDb2x1bW4/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4Um9vbXM/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd0FsbEhvdGVsc09wdGlvbj86IHN0cmluZztcbiAgICBASW5wdXQoKSB0YXJnZXRCbGFuaz86IGJvb2xlYW47XG4gICAgQElucHV0KCkgaG90ZWxUZXh0Pzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heERhdGU/OiBzdHJpbmc7IC8qIDIwMjgtMDEtMDEgKi9cbiAgICBASW5wdXQoKSBtaW5EYXRlPzogc3RyaW5nOyAvKiAyMDI4LTAxLTAxICovXG5cbiAgICBASW5wdXQoKSBmbGFnVGltZT86IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIG1vbnRoc1RvRGlzcGxheT86IG51bWJlciA9IDE7XG5cbiAgICBwcml2YXRlIG1vdW50ZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgcGVuZGluZ1RpY2tlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSByZXRyeVRpbWVvdXQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IG9iamVjdCxcbiAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgbG9hZGVyOiBCYWJ5bG9uV2lkZ2V0U2VhcmNoTG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICAgICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvL1dhaXQgZm9yIGlucHV0c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW91bnRlZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDirIfvuI8gUE9OIEFRVcONIGxhIFVSTCByZWFsIGRlbCBzY3JpcHQgZGUgV2l0Ym9va2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5mbGFnVGltZSA/IDMwMCA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91bnQoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdW50ZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBlbCA9IHRoaXMud2lkZ2V0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgLy8gT3BjacOzbiBBIChzaSBleGlzdGUpOiBpbml0IGdsb2JhbCBtYW51YWxcbiAgICAgICAgaWYgKHdpbmRvdy5pbml0aWFsaXplV2lkZ2V0U2VhcmNoKSB7XG4gICAgICAgICAgICB3aW5kb3cuaW5pdGlhbGl6ZVdpZGdldFNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9wY2nDs24gQjogY29uc3RydWN0b3IgKFNvbG8gZW50cmEgc2kgbm8gZXhpc3RlIGxhIEEpXG4gICAgICAgIGVsc2UgaWYgKHdpbmRvdy5XaWRnZXRTZWFyY2gpIHtcbiAgICAgICAgICAgIG5ldyB3aW5kb3cuV2lkZ2V0U2VhcmNoKGVsLCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluamVjdE1hcmtldGluZ1BhcmFtcyhlbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbmplY3RNYXJrZXRpbmdQYXJhbXMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gUFJPVEVDQ0nDk04gU1NSOiBTaSBlc3RhbW9zIGVuIGVsIHNlcnZpZG9yIGRlIE5vZGUsIGFib3J0YW1vcyBwYXJhIGV2aXRhciBjdWVsZ3Vlc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICAgICAgdHlwZW9mIHNlc3Npb25TdG9yYWdlID09PSAndW5kZWZpbmVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDEuIERJQ0NJT05BUklPUyBERSBOT01FTkNMQVRVUkFTIEVTVMOBTkRBUlxuICAgICAgICAvLyBDbGljIElEcyBhdXRvbcOhdGljb3MgZGUgbGFzIHByaW5jaXBhbGVzIHBsYXRhZm9ybWFzIHB1YmxpY2l0YXJpYXNbY2l0ZTogMTZdXG4gICAgICAgIGNvbnN0IENMSUNLX0lEUyA9IFtcbiAgICAgICAgICAgICdnY2xpZCcsXG4gICAgICAgICAgICAnZ2JyYWlkJyxcbiAgICAgICAgICAgICd3YnJhaWQnLFxuICAgICAgICAgICAgJ2RjbGlkJywgLy8gR29vZ2xlW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ21zY2xraWQnLCAvLyBNaWNyb3NvZnQgLyBCaW5nW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ3ZtY2lkJywgLy8gWWFob29bY2l0ZTogMTZdXG4gICAgICAgICAgICAneWNsaWQnLFxuICAgICAgICAgICAgJ3ltY2xpZCcsIC8vIFlhbmRleFtjaXRlOiAxNl1cbiAgICAgICAgICAgICdmYmNsaWQnLCAvLyBNZXRhIChGYWNlYm9vaywgSW5zdGFncmFtLCBXaGF0c0FwcClbY2l0ZTogMTZdXG4gICAgICAgICAgICAndHRjbGlkJywgLy8gVGlrVG9rW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2xpX2ZhdF9pZCcsIC8vIExpbmtlZEluW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ3R3Y2xpZCcsIC8vIFggKFR3aXR0ZXIpW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2VwaWsnLCAvLyBQaW50ZXJlc3RbY2l0ZTogMTZdXG4gICAgICAgICAgICAncmR0X2NpZCcsIC8vIFJlZGRpdFtjaXRlOiAxNl1cbiAgICAgICAgICAgICdTY0NpZCcsIC8vIFNuYXBjaGF0W2NpdGU6IDE2XVxuICAgICAgICAgICAgJ3FjbGlkJywgLy8gUXVvcmFbY2l0ZTogMTZdXG4gICAgICAgICAgICAnc2knLCAvLyBZb3VUdWJlW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2F3Y2xpZCcsIC8vIEFtYXpvbiBBZHNbY2l0ZTogMTZdXG4gICAgICAgICAgICAndGJsY2knLCAvLyBUYWJvb2xhW2NpdGU6IDE2XVxuICAgICAgICAgICAgJ2RpY2JvJywgLy8gT3V0YnJhaW5bY2l0ZTogMTZdXG4gICAgICAgICAgICAnYWRfaWQnLCAvLyBBZFJvbGxbY2l0ZTogMTZdXG4gICAgICAgICAgICAnaXJjbGlja2lkJyxcbiAgICAgICAgICAgICdjamV2ZW50JywgLy8gQWZpbGlhZG9zIChJbXBhY3QsIENKKVtjaXRlOiAxNl1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBFc3TDoW5kYXIgbWFudWFsIFVUTVxuICAgICAgICBjb25zdCBVVE1TID0gW1xuICAgICAgICAgICAgJ3V0bV9zb3VyY2UnLFxuICAgICAgICAgICAgJ3V0bV9tZWRpdW0nLFxuICAgICAgICAgICAgJ3V0bV9jYW1wYWlnbicsXG4gICAgICAgICAgICAndXRtX3Rlcm0nLFxuICAgICAgICAgICAgJ3V0bV9jb250ZW50JyxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBtYXJrZXRpbmdEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cbiAgICAgICAgLy8gLS0tIENBUEEgMTogRVNDQU5FTyBERSBMQSBVUkwgLS0tXG4gICAgICAgIFsuLi5DTElDS19JRFMsIC4uLlVUTVMsICdvcmlnaW4nXS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSBtYXJrZXRpbmdEYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gLS0tIENBUEEgMjogRVNDQU5FTyBERSBDT09LSUVTIChTaSBsYSBVUkwgZXN0w6EgbGltcGlhIHBlcm8gaGF5IHJhc3RybyBwdWJsaWNpdGFyaW8pIC0tLVxuICAgICAgICBjb25zdCBnZXRDb29raWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChcbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKCcoXnwgKScgKyBuYW1lICsgJz0oW147XSspJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGw7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcmtldGluZ0RhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gR29vZ2xlIEFkcyBndWFyZGEgc3UgR0NMSUQgZW4gbGEgY29va2llIF9nY2xfYXcgKGZvcm1hdG86IEdDTC50aW1lc3RhbXAuaWQpXG4gICAgICAgICAgICBjb25zdCBnY2xBdyA9IGdldENvb2tpZSgnX2djbF9hdycpO1xuICAgICAgICAgICAgaWYgKGdjbEF3ICYmIGdjbEF3LnNwbGl0KCcuJykubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydnY2xpZCddID0gZ2NsQXcuc3BsaXQoJy4nKVsyXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRmFjZWJvb2sgZ3VhcmRhIHN1IEZCQ0xJRCBlbiBsYSBjb29raWUgX2ZicFxuICAgICAgICAgICAgY29uc3QgZmJwID0gZ2V0Q29va2llKCdfZmJwJyk7XG4gICAgICAgICAgICBpZiAoZmJwKSB7XG4gICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZmJjbGlkJ10gPSBmYnA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gQ0FQQSAzOiBFU0NBTkVPIERFTCBEQVRBTEFZRVIgKElueWVjY2lvbmVzIHNpbGVuY2lvc2FzIGRlIFRhZyBNYW5hZ2VyKSAtLS1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAod2luZG93IGFzIGFueSkuZGF0YUxheWVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZGwgPSAod2luZG93IGFzIGFueSkuZGF0YUxheWVyIGFzIGFueVtdO1xuICAgICAgICAgICAgLy8gUmVjb3JyZW1vcyBkZSBtw6FzIHJlY2llbnRlIGEgbcOhcyBhbnRpZ3VvXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gZGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZGxbaV07XG4gICAgICAgICAgICAgICAgWy4uLkNMSUNLX0lEUywgLi4uVVRNUywgJ3RyYWZmaWNfc291cmNlJywgJ29yaWdpbiddLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtW2tleV0gJiYgIW1hcmtldGluZ0RhdGFba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcGVhciB1biBub21icmUgaW50ZXJubyAoZWouIHRyYWZmaWNfc291cmNlKSBhbCBlc3TDoW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbEtleSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PT0gJ3RyYWZmaWNfc291cmNlJyA/ICdvcmlnaW4nIDoga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbZmluYWxLZXldID0gaXRlbVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID4gMCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAtLS0gQ0FQQSA0OiBSRUNVUEVSQVIgLyBHVUFSREFSIFNFU0nDk04gKFByb3RlY2Npw7NuIFNQQSBlbiBBbmd1bGFyKSAtLS1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1hcmtldGluZ0RhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gTm8gaGF5IGRhdG9zIG51ZXZvcywgcmVjdXBlcmFtb3MgdG9kbyBsbyBxdWUgdGVuZ2EgcHJlZmlqbyAnbWt0XydcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZEtleXMgPSBPYmplY3Qua2V5cyhzZXNzaW9uU3RvcmFnZSkuZmlsdGVyKChrKSA9PlxuICAgICAgICAgICAgICAgIGsuc3RhcnRzV2l0aCgnbWt0XycpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RvcmVkS2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxLZXkgPSBrLnJlcGxhY2UoJ21rdF8nLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsKSBtYXJrZXRpbmdEYXRhW29yaWdpbmFsS2V5XSA9IHZhbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSGF5IGRhdG9zIG51ZXZvcywgbG9zIGd1YXJkYW1vcyBwYXJhIGxhIHByw7N4aW1hIHZleiBxdWUgbmF2ZWd1ZSBwb3IgbGEgd2ViXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKG1hcmtldGluZ0RhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBta3RfJHtrZXl9YCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICdBY2Nlc28gYSBzZXNzaW9uU3RvcmFnZSBibG9xdWVhZG8gcG9yIGVsIG5hdmVnYWRvci4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLSBFTlbDjU8gQUwgV0lER0VUIC0tLVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMobWFya2V0aW5nRGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gU2llbXByZSBldmFsdWFtb3MgZWwgb3JpZ2luLCBwb3JxdWUgc2kgdmllbmUgdmFjw61vLCBsbyByZWxsZW5hbW9zIGNvbiBlbCBvcmfDoW5pY28gbyAnd2ViJ1xuICAgICAgICAgICAgaWYgKCFtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSkge1xuICAgICAgICAgICAgICAgIGlmIChtYXJrZXRpbmdEYXRhWyd1dG1fc291cmNlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsndXRtX3NvdXJjZSddICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXJrZXRpbmdEYXRhWyd1dG1fbWVkaXVtJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGBfJHttYXJrZXRpbmdEYXRhWyd1dG1fbWVkaXVtJ119YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ2djbGlkJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnd2JyYWlkJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnZ2JyYWlkJ11cbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnZ29vZ2xlX2NwYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXRpbmdEYXRhWydmYmNsaWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdtZXRhX2Fkcyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXRpbmdEYXRhWyd0dGNsaWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICd0aWt0b2tfYWRzJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyA1LiBSRUQgREUgU0VHVVJJREFEIE9SR8OBTklDQSBGUk9OVEVORFxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcnJlciA9IGRvY3VtZW50LnJlZmVycmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRvY3VtZW50LnJlZmVycmVyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVycmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2dvb2dsZS4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdnb29nbGVfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygnYmluZy4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdiaW5nX29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ3lhaG9vLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ3lhaG9vX29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2R1Y2tkdWNrZ28uJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAnZHVja2R1Y2tnb19vcmdhbmljJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCd5YW5kZXguJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAneWFuZGV4X29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2JhaWR1LicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ2JhaWR1X29yZ2FuaWMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVmZXJyZXIuaW5jbHVkZXMoJ2Vjb3NpYS4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICdlY29zaWFfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygncXdhbnQuJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAncXdhbnRfb3JnYW5pYyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWZlcnJlci5pbmNsdWRlcygnYXNrLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ2Fza19vcmdhbmljJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZmVycmVyLmluY2x1ZGVzKCduYXZlci4nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXRpbmdEYXRhWydvcmlnaW4nXSA9ICduYXZlcl9vcmdhbmljJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbWFya2V0aW5nRGF0YVsnb3JpZ2luJ10gPSAncmVmZXJyYWxfb3RoZXInOyAvLyBUcsOhZmljbyBkZXNkZSBvdHJhIHdlYlxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHLDoWZpY28gZGlyZWN0byAoVVJMIHRlY2xlYWRhIGEgbWFubyBvIHJlZmVycmVyIG9jdWx0bylcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldGluZ0RhdGFbJ29yaWdpbiddID0gJ3dlYic7IC8vIFZhbG9yIHBvciBkZWZlY3RvIHNlZ3VybyBwYXJhIFdpdGJvb2tpbmdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRWwgZXZlbnRvIHNlIGRpc3BhcmEgU0lFTVBSRSwgeWEgcXVlIGNvbW8gbcOtbmltbyBsbGV2YXLDoSB7IG9yaWdpbjogJ3dlYicgfVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3dpZGdldFVwZGF0ZVBhcmFtcycsIHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBtYXJrZXRpbmdEYXRhLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1sndGlja2VyJ10pIHtcbiAgICAgICAgICAgIC8vIEd1YXJkYW1vcyBzaWVtcHJlIGVsIMOaTFRJTU8gdmFsb3IgcXVlIEFuZ3VsYXIgbm9zIG1hbmRlXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdUaWNrZXIgPSBjaGFuZ2VzWyd0aWNrZXInXS5jdXJyZW50VmFsdWUgfHwgJ2FsbC1ob3RlbHMnO1xuXG4gICAgICAgICAgICAvLyBEaXNwYXJhbW9zIGxhIGFjdHVhbGl6YWNpw7NuXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJXaWRnZXRVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5yZXRyeVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJXaWRnZXRVcGRhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5yZXRyeVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJldHJ5VGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLndpZGdldENvbnRhaW5lclxuICAgICAgICAgICAgICAgID8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyRWwpIHJldHVybjtcblxuICAgICAgICAgICAgLy8gMS4gRXNwZXJhbW9zIGEgcXVlIGVsIHdpZGdldCBoYXlhIGRlc2NhcmdhZG8geSBkaWJ1amFkbyBsb3MgaG90ZWxlcyBlbiBlbCBET01cbiAgICAgICAgICAgIGNvbnN0IGhvdGVsT3B0aW9ucyA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ob3RlbC1vcHRpb24nKTtcblxuICAgICAgICAgICAgaWYgKGhvdGVsT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VGlja2VyID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nVGlja2VyICYmIHRoaXMucGVuZGluZ1RpY2tlcj8udHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnBlbmRpbmdUaWNrZXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYWxsLWhvdGVscyc7XG5cbiAgICAgICAgICAgICAgICBsZXQgb3B0aW9uVG9DbGljazogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIDIuIEJ1c2NhbW9zIGxhIG9wY2nDs24gZGUgaG90ZWwgcmVhbCBxdWUgY29pbmNpZGEgY29uIGVsIHRpY2tlclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaG90ZWxPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IGhvdGVsT3B0aW9uc1tpXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0SWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0LmdldEF0dHJpYnV0ZSgnZGF0YS1ob3RlbC1pZCcpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENvaW5jaWRlbmNpYSBleGFjdGEgbyBwYXJjaWFsIChwb3Igc2kgZWwgd2lkZ2V0IGxlIGHDsWFkZSBzdWZpam9zIGFsIElEKVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRJZCA9PT0gdGFyZ2V0VGlja2VyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRJZC5pbmNsdWRlcyh0YXJnZXRUaWNrZXIpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uVG9DbGljayA9IG9wdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvblRvQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uVG9DbGljay5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQcO6biBubyBzZSBoYW4gZGlidWphZG8gbGFzIG9wY2lvbmVzLCBlbCBtb3RvciBzaWd1ZSBjYXJnYW5kby4uLlxuICAgICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy50cmlnZ2VyV2lkZ2V0VXBkYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIDMwMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -8766,7 +8766,7 @@ class BabylonBookingWidgetComponent {
8766
8766
  }
8767
8767
  // --- ENVÍO AL WIDGET ---
8768
8768
  if (Object.keys(marketingData).length > 0) {
8769
- // Witbooking y motores similares suelen necesitar un "origin" genérico además de los parámetros opacos
8769
+ // Siempre evaluamos el origin, porque si viene vacío, lo rellenamos con el orgánico o 'web'
8770
8770
  if (!marketingData['origin']) {
8771
8771
  if (marketingData['utm_source']) {
8772
8772
  marketingData['origin'] =
@@ -8786,7 +8786,42 @@ class BabylonBookingWidgetComponent {
8786
8786
  else if (marketingData['ttclid']) {
8787
8787
  marketingData['origin'] = 'tiktok_ads';
8788
8788
  }
8789
+ else {
8790
+ // 5. RED DE SEGURIDAD ORGÁNICA FRONTEND
8791
+ const referrer = document.referrer
8792
+ ? document.referrer.toLowerCase()
8793
+ : '';
8794
+ if (referrer) {
8795
+ if (referrer.includes('google.'))
8796
+ marketingData['origin'] = 'google_organic';
8797
+ else if (referrer.includes('bing.'))
8798
+ marketingData['origin'] = 'bing_organic';
8799
+ else if (referrer.includes('yahoo.'))
8800
+ marketingData['origin'] = 'yahoo_organic';
8801
+ else if (referrer.includes('duckduckgo.'))
8802
+ marketingData['origin'] = 'duckduckgo_organic';
8803
+ else if (referrer.includes('yandex.'))
8804
+ marketingData['origin'] = 'yandex_organic';
8805
+ else if (referrer.includes('baidu.'))
8806
+ marketingData['origin'] = 'baidu_organic';
8807
+ else if (referrer.includes('ecosia.'))
8808
+ marketingData['origin'] = 'ecosia_organic';
8809
+ else if (referrer.includes('qwant.'))
8810
+ marketingData['origin'] = 'qwant_organic';
8811
+ else if (referrer.includes('ask.'))
8812
+ marketingData['origin'] = 'ask_organic';
8813
+ else if (referrer.includes('naver.'))
8814
+ marketingData['origin'] = 'naver_organic';
8815
+ else
8816
+ marketingData['origin'] = 'referral_other'; // Tráfico desde otra web
8817
+ }
8818
+ else {
8819
+ // Tráfico directo (URL tecleada a mano o referrer oculto)
8820
+ marketingData['origin'] = 'web'; // Valor por defecto seguro para Witbooking
8821
+ }
8822
+ }
8789
8823
  }
8824
+ // El evento se dispara SIEMPRE, ya que como mínimo llevará { origin: 'web' }
8790
8825
  setTimeout(() => {
8791
8826
  const event = new CustomEvent('widgetUpdateParams', {
8792
8827
  detail: marketingData,