sf-reglanegociom3 1.0.12-beta84 → 1.0.12-beta85

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.
Files changed (26) hide show
  1. package/bundles/sf-reglanegociom3.umd.js +8 -3
  2. package/bundles/sf-reglanegociom3.umd.js.map +1 -1
  3. package/bundles/sf-reglanegociom3.umd.min.js +1 -1
  4. package/bundles/sf-reglanegociom3.umd.min.js.map +1 -1
  5. package/esm2015/lib/rnm3/Services/m3-reg-masivo.service.js +4 -3
  6. package/esm5/lib/rnm3/Services/m3-reg-masivo.service.js +6 -3
  7. package/fesm2015/sf-reglanegociom3.js +4 -3
  8. package/fesm2015/sf-reglanegociom3.js.map +1 -1
  9. package/fesm5/sf-reglanegociom3.js +6 -3
  10. package/fesm5/sf-reglanegociom3.js.map +1 -1
  11. package/lib/rnm3/Services/m3-reg-masivo.service.d.ts +1 -1
  12. package/package.json +1 -1
  13. package/lib/rnm3/Maestro/Notificaciones/M3Nofiticaciones.model.d.ts +0 -10
  14. package/lib/rnm3/Maestro/Ubicacion/M3UbiAdicionales.type.d.ts +0 -4
  15. package/lib/rnm3/Maestro/Ubicacion/M3Ubicacion.type.d.ts +0 -17
  16. package/lib/rnm3/Maestro/Ubicacion/m3-hubs.type.d.ts +0 -12
  17. package/lib/rnm3/Maestro/Ubicacion/m3-teclas-rapidas.d.ts +0 -6
  18. package/lib/rnm3/Offline/Service/bd-offline-log.service.d.ts +0 -27
  19. package/lib/rnm3/Offline/Service/bd-offline.service.d.ts +0 -17
  20. package/lib/rnm3/Offline/Service/filtros-diario.service.d.ts +0 -5
  21. package/lib/rnm3/Promociones/Models/M3CONDIAGRUPACION.class.d.ts +0 -8
  22. package/lib/rnm3/Promociones/Models/M3CONDIPROMO.class.d.ts +0 -9
  23. package/lib/rnm3/Promociones/Models/M3DETCONDIPROMO.class.d.ts +0 -7
  24. package/lib/rnm3/Promociones/Models/M3ENCPROMO.class.d.ts +0 -17
  25. package/lib/rnm3/Promociones/Models/M3PromoProcesada.class.d.ts +0 -32
  26. package/lib/rnm3/Services/ConsultasM3/m3-consultas.service.d.ts +0 -15
@@ -39,9 +39,10 @@ export class M3RegMasivo {
39
39
  * @param {?} PostServiceM3
40
40
  * @param {?} oDatUser
41
41
  * @param {?} oDataProc
42
+ * @param {?=} oM3Ubicacion
42
43
  * @return {?}
43
44
  */
44
- AdicionarMasivo(oM3CouchMaestro, PostServiceM3, oDatUser, oDataProc) {
45
+ AdicionarMasivo(oM3CouchMaestro, PostServiceM3, oDatUser, oDataProc, oM3Ubicacion = null) {
45
46
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
46
47
  this.GetReader(oDataProc);
47
48
  /** @type {?} */
@@ -55,7 +56,7 @@ export class M3RegMasivo {
55
56
  /** @type {?} */
56
57
  var arrCSV = csv.split("\n");
57
58
  /** @type {?} */
58
- var proceso = yield this.adicionar_masivo_from_array(oM3CouchMaestro, PostServiceM3, oDatUser, arrCSV);
59
+ var proceso = yield this.adicionar_masivo_from_array(oM3CouchMaestro, PostServiceM3, oDatUser, arrCSV, oM3Ubicacion);
59
60
  return proceso;
60
61
  });
61
62
  }
@@ -422,4 +423,4 @@ function estructCSV_tsickle_Closure_declarations() {
422
423
  estructCSV.prototype.M3Det;
423
424
  }
424
425
 
425
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibTMtcmVnLW1hc2l2by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2YtcmVnbGFuZWdvY2lvbTMvIiwic291cmNlcyI6WyJsaWIvcm5tMy9TZXJ2aWNlcy9tMy1yZWctbWFzaXZvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxNQUFNOzs7Ozs7OztJQVVGLFlBQVksVUFBa0IsRUFBRSxXQUF1QixFQUFFLFdBQWdCLEVBQUUsU0FBa0IsRUFDakY7UUFBQSxzQkFBaUIsR0FBakIsaUJBQWlCO3lCQVBELEdBQUc7MEJBQ1YsSUFBSSxVQUFVLEVBQUU7eUJBSVQsS0FBSztRQUc3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUM5Qjs7OztJQUVNLG9CQUFvQjtRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0lBSXBCLGVBQWUsQ0FBQyxlQUErQixFQUFFLGFBQTRCLEVBQUUsUUFBYSxFQUFFLFNBQWM7O1lBQ3JILElBQUksQ0FB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LEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDOztRQUdsSixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sV0FBVyxDQUFDOztDQUkxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE0zUEl0ZW1zV0VCLCBNM1BEZXRhbGxlSXRlbXMgfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcGRldGFsbGUtaXRlbXNcIjtcclxuaW1wb3J0IHsgVHlwZU0zUHJkR3JwIH0gZnJvbSBcIi4uL01hZXN0cm8vTTNQcmRHcnAudHlwZVwiO1xyXG5pbXBvcnQgeyBNM1JlZ1NlcnZpY2UgfSBmcm9tIFwiLi9tMy1yZWctc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNM0NvdWNoTWFlc3RybyB9IGZyb20gXCIuLi9EYXRhL20zLWNvdWNoLW1hZXN0cm9cIjtcclxuaW1wb3J0IHsgUG9zdFNlcnZpY2VNMyB9IGZyb20gXCIuLi8uLi9Db25leGlvblNRTC9wb3N0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VNM01hZXN0cm8gfSBmcm9tIFwiLi9NM01hZXN0cm8uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNM1Byb2Nlc29zIH0gZnJvbSBcIi4uL1JlZ2lzdHJvL20zLXByb2Nlc29zXCI7XHJcbmltcG9ydCB7IE0zUERpbmFtaWNhcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wZGluYW1pY2FzXCI7XHJcbmltcG9ydCB7IE0zUGVyWFByb2Nlc28gfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcGVyLXgtcHJvY2Vzb1wiO1xyXG5pbXBvcnQgeyBNM1ViaWNhY2lvbiB9IGZyb20gXCIuLi9NYWVzdHJvL1ViaWNhY2lvbi9NM1ViaWNhY2lvbi50eXBlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8gfSBmcm9tIFwiLi9tMy1sb2FkLWwtcHJlY2lvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ291Y2hQUkRTU2VydmljZSB9IGZyb20gXCIuLi9PZmZsaW5lL2NvdWNoLXByZHMuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE0zUmVnTWFzaXZvIHtcclxuXHJcbiAgICBwcml2YXRlIGdzSWRLYXRpb3M6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmVhZGVyOiBGaWxlUmVhZGVyO1xyXG4gICAgcHJpdmF0ZSBzZXBhcmFkb3I6IHN0cmluZyA9IFwiLFwiO1xyXG4gICAgcHJpdmF0ZSBvTTNQcm9jZXNvID0gbmV3IE0zUHJvY2Vzb3MoKTtcclxuICAgIHByaXZhdGUgcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAgIHByaXZhdGUgQ29uZk1hc2l2YTogYW55O1xyXG4gICAgcHVibGljIHJvdW5kZWRfcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAgIHB1YmxpYyBnYkJhckNvZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKGlzSWRLYXRpb3M6IHN0cmluZywgaW9NM1Byb2Nlc286IE0zUHJvY2Vzb3MsIGlDb25mTWFzaXZhOiBhbnksIGliQmFyY29kZTogYm9vbGVhbixcclxuICAgICAgICBwcml2YXRlIG9Db3VjaFBSRFNTZXJ2aWNlOiBDb3VjaFBSRFNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5vTTNQcm9jZXNvID0gaW9NM1Byb2Nlc287XHJcbiAgICAgICAgdGhpcy5nc0lkS2F0aW9zID0gaXNJZEthdGlvcztcclxuICAgICAgICB0aGlzLkNvbmZNYXNpdmEgPSBpQ29uZk1hc2l2YTtcclxuICAgICAgICB0aGlzLmdiQmFyQ29kZSA9IGliQmFyY29kZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0X3JvdW5kZWRfcHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91bmRlZF9wcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICAvLy9BZGljaW9uYXIgcHJvZHVjdG9zIGVuIG1hc2l2b1xyXG4gICAgcHVibGljIGFzeW5jIEFkaWNpb25hck1hc2l2byhvTTNDb3VjaE1hZXN0cm86IE0zQ291Y2hNYWVzdHJvLCBQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBvRGF0VXNlcjogYW55LCBvRGF0YVByb2M6IGFueSkge1xyXG4gICAgICAgIHRoaXMuR2V0UmVhZGVyKG9EYXRhUHJvYyk7XHJcbiAgICAgICAgbGV0IGNzdjogc3RyaW5nO1xyXG4gICAgICAgIGlmICghdGhpcy5yZWFkZXIpIHtcclxuICAgICAgICAgICAgY3N2ID0gb0RhdGFQcm9jLlRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjc3YgPSB0aGlzLnJlYWRlci5yZXN1bHQudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFyckNTVjogQXJyYXk8c3RyaW5nPiA9IGNzdi5zcGxpdChcIlxcblwiKTtcclxuXHJcbiAgICAgICAgdmFyIHByb2Nlc286IFtNM1Byb2Nlc29zLCBzdHJpbmddID0gYXdhaXQgdGhpcy5hZGljaW9uYXJfbWFzaXZvX2Zyb21fYXJyYXkob00zQ291Y2hNYWVzdHJvLCBQb3N0U2VydmljZU0zLCBvRGF0VXNlciwgYXJyQ1NWKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc287XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNvcnJlIHkgYWRpY2lvbmEgbG9zIHByb2R1Y3RvcyBlbiB1biBhcnJheSBhIHVuIHByb2Nlc29cclxuICAgICAqIEBwYXJhbSBvTTNDb3VjaE1hZXN0cm8gXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBvRGF0VXNlciBcclxuICAgICAqIEBwYXJhbSBhcnJDU1YgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBhZGljaW9uYXJfbWFzaXZvX2Zyb21fYXJyYXkob00zQ291Y2hNYWVzdHJvOiBNM0NvdWNoTWFlc3RybywgUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgb0RhdFVzZXI6IGFueSwgYXJyQ1NWOiBBcnJheTxzdHJpbmc+LCBvTTNVYmljYWNpb246IE0zVWJpY2FjaW9uID0gbnVsbCwgYXBsRXhjOiBzdHJpbmcgPSBcIjBcIikge1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSBhcnJDU1YubGVuZ3RoO1xyXG4gICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgdmFyIHByb2R1Y3Q6IFR5cGVNM1ByZEdycFxyXG4gICAgICAgIHZhciBvU2VydmljZU0zTWFlc3RybyA9IG5ldyBTZXJ2aWNlTTNNYWVzdHJvKCk7XHJcbiAgICAgICAgdmFyIG9NM1JlZ1NlcnZpY2UgPSBuZXcgTTNSZWdTZXJ2aWNlKG9NM0NvdWNoTWFlc3RybywgUG9zdFNlcnZpY2VNMywgdGhpcy5nc0lkS2F0aW9zKTtcclxuICAgICAgICB2YXIgcHJkc0ZhaWxzOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBwcmRmYWlsYWN0dWFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgdmFyIHJlc3VsdDogYW55O1xyXG4gICAgICAgIGxldCBhcnJheVJlc3A6IFtNM1Byb2Nlc29zLCBzdHJpbmddID0gW3RoaXMub00zUHJvY2VzbywgXCJcIl07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHByZGZhaWxhY3R1YWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGxpbmU6IHN0cmluZyA9IGFyckNTVltpXTtcclxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvZXN0cnVjdENTVjogZXN0cnVjdENTVjtcclxuICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWID0gdGhpcy5TZXRFc3RydWN0Q1NWKGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2JCYXJDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcImZ1ZSBsb2NhbDogXCIgKyBvZXN0cnVjdENTVi5za3UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9Db3VjaFBSRFNTZXJ2aWNlLmdldChvZXN0cnVjdENTVi5za3UpLnRoZW4oYXN5bmMgcHJkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJvYnR1dm8gbG9jYWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHByZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8odGhpcy5nc0lkS2F0aW9zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhwcmQuTGlzdENvZHMsIG9EYXRVc2VyLCBQb3N0U2VydmljZU0zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJhc2lnbm8gbHAgbG9jYWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhwcmQuTGlzdENvZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBwcmQuTGlzdENvZHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFzeW5jIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBscCAtIGludGVudG8gc2VydmVyOiBcIiArIG9lc3RydWN0Q1NWLnNrdSArIFwiOiBcIiArIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0geyBcImlkX3ViaWNhY2lvblwiOiBvRGF0VXNlci5Vc3VhcmlvU2lzdGVtYS5VQklDQUNJT04sIFwiQ29kaWdvXCI6IG9lc3RydWN0Q1NWLnNrdSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0ID0gYXdhaXQgb1NlcnZpY2VNM01hZXN0cm8uR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZUFzeW5jKFBvc3RTZXJ2aWNlTTMsIHRoaXMuZ3NJZEthdGlvcywgZGF0YSwgb0RhdFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGNhdGNoIGxwOiBcIiArIG9lc3RydWN0Q1NWLnNrdSArIFwiOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyck1zZzogc3RyaW5nID0gZXJyLnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJkRmFpbCA9IGVyck1zZy5zdWJzdHJpbmcoZXJyTXNnLmluZGV4T2YoXCJDb2RpZ29cIikgKyA3KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmRzRmFpbHMgKz0gcHJkRmFpbCArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZGZhaWxhY3R1YWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcob00zVWJpY2FjaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKG9NM1ViaWNhY2lvbiAmJiBvTTNVYmljYWNpb24uSURVYmljYWNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvTTNVYmljYWNpb24gJiYgb00zVWJpY2FjaW9uLklEVWJpY2FjaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBhd2FpdCBvU2VydmljZU0zTWFlc3Ryby5NM0dldFByb2R1Y3RvQnlTS1VBc3luYyhQb3N0U2VydmljZU0zLCB0aGlzLmdzSWRLYXRpb3MsIG9lc3RydWN0Q1NWLnNrdSwgb0RhdFVzZXIsIG9NM1ViaWNhY2lvbi5JRFViaWNhY2lvbiwgYXBsRXhjKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBhd2FpdCBvU2VydmljZU0zTWFlc3Ryby5NM0dldFByb2R1Y3RvQnlTS1VBc3luYyhQb3N0U2VydmljZU0zLCB0aGlzLmdzSWRLYXRpb3MsIG9lc3RydWN0Q1NWLnNrdSwgb0RhdFVzZXIsIFwiLTFcIiwgYXBsRXhjKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhwcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIGlmICghcHJkZmFpbGFjdHVhbCAmJiBwcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcmVjaW9TaUFQbGljYShwcm9kdWN0LCBvZXN0cnVjdENTVik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5BZGRQcmRUb00zUHJvY2Vzbyhwcm9kdWN0LCBvZXN0cnVjdENTViwgb00zUmVnU2VydmljZSwgb0RhdFVzZXIsIG9NM1ViaWNhY2lvbik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBwcm9kdWN0IG5vIHNlIGxsZW5vOiBcIiArIG9lc3RydWN0Q1NWLnNrdSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IGNvdW50ICogMTAwIC8gdG90YWw7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmRlZF9wcm9ncmVzcyA9IE1hdGgucm91bmQodGhpcy5wcm9ncmVzcyAqIDEwMCkgLyAxMDBcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXlSZXNwWzBdID0gdGhpcy5vTTNQcm9jZXNvO1xyXG4gICAgICAgIGFycmF5UmVzcFsxXSA9IHByZHNGYWlscztcclxuICAgICAgICByZXR1cm4gYXJyYXlSZXNwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ2FtYmlhciBwcmVjaW8gZGUgcHJvZHVjdG8uXHJcbiAgICBwdWJsaWMgc2V0UHJlY2lvU2lBUGxpY2EocHJvZHVjdDogVHlwZU0zUHJkR3JwLCBvZXN0cnVjdENTVjogZXN0cnVjdENTVikge1xyXG4gICAgICAgIGlmIChvZXN0cnVjdENTVi5wcmVjaW8gIT09IE5hTiAmJiBvZXN0cnVjdENTVi5wcmVjaW8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwcm9kdWN0LkxvTTNQcmRHZW5lcmFsWzBdLkxvTTNQcmRMaXN0YS5QUkVDSU8gPSBvZXN0cnVjdENTVi5wcmVjaW87XHJcbiAgICAgICAgICAgIHByb2R1Y3QuTG9NM1ByZEdlbmVyYWxbMF0uTG9NM1ByZExpc3RhLk0zUHJlc2VudGFjaW9uZXMuZm9yRWFjaChvTTNQcmVzZW50YWNpb25lcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBvTTNQcmVzZW50YWNpb25lcy5WQUxPUiA9IG9lc3RydWN0Q1NWLnByZWNpbztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vQWRpY2lvbmFyIGEgbTNwcm9jZXNvLCBwcm9kdWN0byBlc3BlY2lmaWNvLCBzZSBlbnZpYSBjYW50aWRhZC5cclxuICAgIHB1YmxpYyBBZGRQcmRUb00zUHJvY2Vzbyhwcm9kdWN0OiBUeXBlTTNQcmRHcnAsIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWLCBvTTNSZWdTZXJ2aWNlOiBNM1JlZ1NlcnZpY2UsIG9EYXRVc2VyOiBhbnksIG9NM1ViaWNhY2lvbjogTTNVYmljYWNpb24gPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIG9NM1BJdGVtc1dFQiA9IG5ldyBNM1BJdGVtc1dFQigpO1xyXG4gICAgICAgIG9NM1BJdGVtc1dFQi5kQ2FudGlkYWQgPSBvZXN0cnVjdENTVi5jYW50aWRhZDtcclxuICAgICAgICBpZiAob2VzdHJ1Y3RDU1YuUGF0aEltYWdlbikge1xyXG4gICAgICAgICAgICBvTTNQSXRlbXNXRUIuUGF0aEltYWdlbiA9IG9lc3RydWN0Q1NWLlBhdGhJbWFnZW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9NM1BJdGVtc1dFQiA9IG9NM1JlZ1NlcnZpY2UuTG9hZEFkaWNpb25hbGVzKG9NM1BJdGVtc1dFQiwgcHJvZHVjdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9NM1Byb2Nlc28uTTNFTkMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgLy8vUHJpbWVyYSB2ZXogXHJcbiAgICAgICAgICAgIC8vL05PIFNFIEVTVEEgRU5WSUFORE8gSU5GT1JNQUNJT04gREUgUFJPTU9DSU9ORVNcclxuICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvID0gb00zUmVnU2VydmljZS5Mb2FkTTNQcm9jZXNvRW1wdHlQREIocHJvZHVjdCwgb00zUEl0ZW1zV0VCLCBvRGF0VXNlciwgb00zVWJpY2FjaW9uLCBudWxsLCB0aGlzLm9NM1Byb2Nlc28pO1xyXG4gICAgICAgICAgICAvL0FncmVnYXIgZGluYW1pY2FzXHJcbiAgICAgICAgICAgIHRoaXMuQWRpY2lvbmFyRGluYW1pY2Eob2VzdHJ1Y3RDU1YpO1xyXG4gICAgICAgICAgICB0aGlzLkFkaWNpb25hclBlcnNvbmFzQVByb2Nlc28ob2VzdHJ1Y3RDU1YpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvTTNSZWdTZXJ2aWNlLkxvYWRNM1Byb2Nlc29Gcm9tRGF0YSh0aGlzLm9NM1Byb2Nlc28sIHByb2R1Y3QsIG9NM1BJdGVtc1dFQiwgb00zVWJpY2FjaW9uLCBudWxsLCBvRGF0VXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuQWRpY2lvbmFyRGV0YWxsZShvZXN0cnVjdENTVik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGljaW9uYXIgY2FwdHVyYXMgZGluYW1pY2FzXHJcbiAgICAgKiBAcGFyYW0gb2VzdHJ1Y3RDU1YgRXN0cnVjdHVyYSBjb24gaW5mb3JtYWNpb24gZGUgbGluZWEgYSBhZ3JlZ2FyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBBZGljaW9uYXJEaW5hbWljYShvZXN0cnVjdENTVjogZXN0cnVjdENTVikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBkaW5hbWljYXMgPSBvZXN0cnVjdENTVi5EaW5hbWljYXNcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaW5hbWljYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBvTTNQRGluYW1pY2FzID0gbmV3IE0zUERpbmFtaWNhcygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9NM1Byb2Nlc28ubE0zUERpbmFtaWNhcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5sTTNQRGluYW1pY2FzID0gbmV3IEFycmF5PE0zUERpbmFtaWNhcz4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9NM1BEaW5hbWljYXMuTm9tYnJlID0gZGluYW1pY2FzW2ldLkF0cmlidXRvO1xyXG4gICAgICAgICAgICAgICAgb00zUERpbmFtaWNhcy5WYWxvciA9IGRpbmFtaWNhc1tpXS5WYWxvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5sTTNQRGluYW1pY2FzLnB1c2gob00zUERpbmFtaWNhcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGFkaWNpb25hciBkaW5hbWljYVwiKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGljaW9uYXIgcGVyc29uYXMgYSBwcm9jZXNvXHJcbiAgICAgKiBAcGFyYW0gb2VzdHJ1Y3RDU1YgRXN0cnVjdHVyYSBjb24gaW5mb3JtYWNpb24gYSBhZ3JlZ2FyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBBZGljaW9uYXJQZXJzb25hc0FQcm9jZXNvKG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHBlcnNvbmFzID0gb2VzdHJ1Y3RDU1YuUGVyc29uYXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVyc29uYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBvTTNQZXJYUHJvY2VzbyA9IG5ldyBNM1BlclhQcm9jZXNvKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub00zUHJvY2Vzby5NM1BlclhQcm9jZXNvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLk0zUGVyWFByb2Nlc28gPSBuZXcgQXJyYXk8TTNQZXJYUHJvY2Vzbz4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9NM1BlclhQcm9jZXNvLlRkb2MgPSBwZXJzb25hc1tpXS5UZG9jO1xyXG4gICAgICAgICAgICAgICAgb00zUGVyWFByb2Nlc28uTmRvYyA9IHBlcnNvbmFzW2ldLk5kb2M7XHJcbiAgICAgICAgICAgICAgICBvTTNQZXJYUHJvY2Vzby5UaXBvUGVyc29uYSA9IHBlcnNvbmFzW2ldLkF0cmlidXRvO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLk0zUGVyWFByb2Nlc28ucHVzaChvTTNQZXJYUHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGFkaWNpb25hciBwZXJzb25hc1wiKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGljaW9uYXIgZGV0YWxsZSBhbCB1bHRpbW8gZW5jYWJlemFkbyBhZ3JlZ2Fkby5cclxuICAgICAqIEBwYXJhbSBvZXN0cnVjdENTViBFc3RydWN0dXJhIGNvbiBpbmZvcm1hY2lvbiBkZSBsaW5lYSBhIGFncmVnYXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIEFkaWNpb25hckRldGFsbGUob2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgZGV0YWxsZXMgPSBvZXN0cnVjdENTVi5NM0RldFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRldGFsbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb00zUERldGFsbGVJdGVtcyA9IG5ldyBNM1BEZXRhbGxlSXRlbXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBvTTNQRGV0YWxsZUl0ZW1zLk5vbWJyZUNvbmNlcHRvID0gZGV0YWxsZXNbaV0uQXRyaWJ1dG87XHJcbiAgICAgICAgICAgICAgICBvTTNQRGV0YWxsZUl0ZW1zLlZhbG9yID0gZGV0YWxsZXNbaV0uVmFsb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28uTTNFTkNbdGhpcy5vTTNQcm9jZXNvLk0zRU5DLmxlbmd0aCAtIDFdLk0zREVULnB1c2gob00zUERldGFsbGVJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMub00zUHJvY2Vzby5NM0VOQy5maW5kKHggPT4geC5JZFByb2R1Y3RvID09IG9lc3RydWN0Q1NWLilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgYWRpY2lvbmFyIGRldGFsbGVcIilcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9PYnRlbmVyIHkgc2V0ZWFyIGxhIGluZm9ybWFjaW9uIGRlIGFyY2hpdm8gQ1NWIHkgc2VwYXJhZG9yLlxyXG4gICAgcHVibGljIEdldFJlYWRlcihvRGF0YVByb2M6IGFueSkge1xyXG4gICAgICAgIHRoaXMucmVhZGVyID0gb0RhdGFQcm9jLkNTVjtcclxuICAgICAgICB0aGlzLnNlcGFyYWRvciA9IG9EYXRhUHJvYy5TZXBhcmFkb3I7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9TZXRlYXIgZXN0cnVjdXRhciBkZSBDU1ZcclxuICAgIHB1YmxpYyBTZXRFc3RydWN0Q1NWKGxpbmU6IHN0cmluZykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBvZXN0cnVjdENTVjogZXN0cnVjdENTViA9IHsgXCJjYW50aWRhZFwiOiBudWxsLCBcInByZWNpb1wiOiBudWxsLCBcInNrdVwiOiBudWxsLCBcIlBhdGhJbWFnZW5cIjogbnVsbCwgXCJEaW5hbWljYXNcIjogW10sIFwiUGVyc29uYXNcIjogW10sIFwiTTNEZXRcIjogW10gfTtcclxuICAgICAgICAgICAgdmFyIG9BcnJDU1Y6IEFycmF5PHN0cmluZz4gPSBsaW5lLnNwbGl0KHRoaXMuc2VwYXJhZG9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkNvbmZNYXNpdmEgJiYgdGhpcy5Db25mTWFzaXZhLkNvbHVtbmFzKSB7XHJcbiAgICAgICAgICAgICAgICBvZXN0cnVjdENTViA9IHRoaXMuRXN0cnVjdER5bmFtaWMob0FyckNTVik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvZXN0cnVjdENTViA9IHRoaXMuRXN0cnVjdERlZmF1bHQob0FyckNTVik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvZXN0cnVjdENTVjtcclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGNyZWFuZG8gZXN0cnVjdHVyYS4gUmV2aXNhciBsaW5lYXNcIik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXN0cnVjdHVyYSBkaW5hbWljYSBkZSBjYXJndWUgbWFzaXZhXHJcbiAgICAgKiBAcGFyYW0gb0FyckNTViBhcnJlZ2xvIGNvbiBpbmZvcm1hY2lvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIEVzdHJ1Y3REeW5hbWljKG9BcnJDU1Y6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB2YXIgY29sdW1uYXM6IEFycmF5PGFueT4gPSB0aGlzLkNvbmZNYXNpdmEuQ29sdW1uYXM7XHJcbiAgICAgICAgdmFyIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWID0geyBcImNhbnRpZGFkXCI6IG51bGwsIFwicHJlY2lvXCI6IG51bGwsIFwic2t1XCI6IG51bGwsIFwiUGF0aEltYWdlblwiOiBudWxsLCBcIkRpbmFtaWNhc1wiOiBbXSwgXCJQZXJzb25hc1wiOiBbXSwgXCJNM0RldFwiOiBbXSB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbmFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uYXNbaV0uRXN0cnVjdHVyYSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkNhbnRpZGFkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuY2FudGlkYWQgPSArb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiUHJlY2lvXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YucHJlY2lvID0gK29BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlNLVVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLnNrdSA9IG9BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkRJTkFNSUNBXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpbiA9IHsgXCJBdHJpYnV0b1wiOiBjb2x1bW5hc1tpXS5BdHJpYnV0bywgXCJWYWxvclwiOiBvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLkRpbmFtaWNhcy5wdXNoKGRpbik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiTTNERVRcIjpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbTNEZXQgPSB7IFwiQXRyaWJ1dG9cIjogY29sdW1uYXNbaV0uQXRyaWJ1dG8sIFwiVmFsb3JcIjogb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl0gfTtcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5NM0RldC5wdXNoKG0zRGV0KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJUSVBPUEVSU09OQVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWxvciA9IG9BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZG9jOiBzdHJpbmcgPSBcIjVcIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmRvYzogc3RyaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsb3Iuc3BsaXQoXCItXCIpLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkb2MgPSB2YWxvci5zcGxpdChcIi1cIilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5kb2MgPSB2YWxvci5zcGxpdChcIi1cIilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmRvYyA9IHZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnNvbmEgPSB7IFwiQXRyaWJ1dG9cIjogY29sdW1uYXNbaV0uQXRyaWJ1dG8sIFwiVGRvY1wiOiB0ZG9jLCBcIk5kb2NcIjogbmRvYyB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLlBlcnNvbmFzLnB1c2gocGVyc29uYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZXN0cnVjdENTVjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzdHJ1Y3R1cmEgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSBvQXJyQ1NWIEFycmVnbG8gY29uIGluZm9ybWFjaW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBFc3RydWN0RGVmYXVsdChvQXJyQ1NWOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdmFyIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWID0geyBcImNhbnRpZGFkXCI6IG51bGwsIFwicHJlY2lvXCI6IG51bGwsIFwic2t1XCI6IG51bGwsIFwiUGF0aEltYWdlblwiOiBudWxsLCBcIkRpbmFtaWNhc1wiOiBbXSwgXCJQZXJzb25hc1wiOiBbXSwgXCJNM0RldFwiOiBbXSB9O1xyXG4gICAgICAgIC8vdmFyIG9BcnJDU1Y6IEFycmF5PHN0cmluZz4gPSBsaW5lLnNwbGl0KHRoaXMuc2VwYXJhZG9yKTtcclxuXHJcbiAgICAgICAgaWYgKG9BcnJDU1YubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgb2VzdHJ1Y3RDU1Yuc2t1ID0gb0FyckNTVlswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9BcnJDU1YubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuY2FudGlkYWQgPSArb0FyckNTVlsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvQXJyQ1NWLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgICAgIG9lc3RydWN0Q1NWLnByZWNpbyA9ICtvQXJyQ1NWWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob0FyckNTVi5sZW5ndGggPj0gNCkge1xyXG4gICAgICAgICAgICBvZXN0cnVjdENTVi5QYXRoSW1hZ2VuID0gb0FyckNTVlszXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9lc3RydWN0Q1NWO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIGVzdHJ1Y3RDU1Yge1xyXG4gICAgc2t1OiBzdHJpbmc7XHJcbiAgICBjYW50aWRhZDogbnVtYmVyO1xyXG4gICAgcHJlY2lvOiBudW1iZXI7XHJcbiAgICBQYXRoSW1hZ2VuOiBzdHJpbmc7XHJcbiAgICBEaW5hbWljYXM6IEFycmF5PGFueT47XHJcbiAgICBQZXJzb25hczogQXJyYXk8YW55PjtcclxuICAgIE0zRGV0OiBBcnJheTxhbnk+O1xyXG59Il19
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibTMtcmVnLW1hc2l2by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2YtcmVnbGFuZWdvY2lvbTMvIiwic291cmNlcyI6WyJsaWIvcm5tMy9TZXJ2aWNlcy9tMy1yZWctbWFzaXZvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxNQUFNOzs7Ozs7OztJQVVGLFlBQVksVUFBa0IsRUFBRSxXQUF1QixFQUFFLFdBQWdCLEVBQUUsU0FBa0IsRUFDakY7UUFBQSxzQkFBaUIsR0FBakIsaUJBQWlCO3lCQVBELEdBQUc7MEJBQ1YsSUFBSSxVQUFVLEVBQUU7eUJBSVQsS0FBSztRQUc3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUM5Qjs7OztJQUVNLG9CQUFvQjtRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztJQUlwQixlQUFlLENBQUMsZUFBK0IsRUFBRSxhQUE0QixFQUFFLFFBQWEsRUFBRSxTQUFjLEVBQUUsZUFBNEIsSUFB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QUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDOztRQUdsSixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sV0FBVyxDQUFDOztDQUkxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE0zUEl0ZW1zV0VCLCBNM1BEZXRhbGxlSXRlbXMgfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcGRldGFsbGUtaXRlbXNcIjtcclxuaW1wb3J0IHsgVHlwZU0zUHJkR3JwIH0gZnJvbSBcIi4uL01hZXN0cm8vTTNQcmRHcnAudHlwZVwiO1xyXG5pbXBvcnQgeyBNM1JlZ1NlcnZpY2UgfSBmcm9tIFwiLi9tMy1yZWctc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNM0NvdWNoTWFlc3RybyB9IGZyb20gXCIuLi9EYXRhL20zLWNvdWNoLW1hZXN0cm9cIjtcclxuaW1wb3J0IHsgUG9zdFNlcnZpY2VNMyB9IGZyb20gXCIuLi8uLi9Db25leGlvblNRTC9wb3N0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VNM01hZXN0cm8gfSBmcm9tIFwiLi9NM01hZXN0cm8uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNM1Byb2Nlc29zIH0gZnJvbSBcIi4uL1JlZ2lzdHJvL20zLXByb2Nlc29zXCI7XHJcbmltcG9ydCB7IE0zUERpbmFtaWNhcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wZGluYW1pY2FzXCI7XHJcbmltcG9ydCB7IE0zUGVyWFByb2Nlc28gfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcGVyLXgtcHJvY2Vzb1wiO1xyXG5pbXBvcnQgeyBNM1ViaWNhY2lvbiB9IGZyb20gXCIuLi9NYWVzdHJvL1ViaWNhY2lvbi9NM1ViaWNhY2lvbi50eXBlXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8gfSBmcm9tIFwiLi9tMy1sb2FkLWwtcHJlY2lvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ291Y2hQUkRTU2VydmljZSB9IGZyb20gXCIuLi9PZmZsaW5lL2NvdWNoLXByZHMuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE0zUmVnTWFzaXZvIHtcclxuXHJcbiAgICBwcml2YXRlIGdzSWRLYXRpb3M6IHN0cmluZztcclxuICAgIHByaXZhdGUgcmVhZGVyOiBGaWxlUmVhZGVyO1xyXG4gICAgcHJpdmF0ZSBzZXBhcmFkb3I6IHN0cmluZyA9IFwiLFwiO1xyXG4gICAgcHJpdmF0ZSBvTTNQcm9jZXNvID0gbmV3IE0zUHJvY2Vzb3MoKTtcclxuICAgIHByaXZhdGUgcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAgIHByaXZhdGUgQ29uZk1hc2l2YTogYW55O1xyXG4gICAgcHVibGljIHJvdW5kZWRfcHJvZ3Jlc3M6IG51bWJlcjtcclxuICAgIHB1YmxpYyBnYkJhckNvZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKGlzSWRLYXRpb3M6IHN0cmluZywgaW9NM1Byb2Nlc286IE0zUHJvY2Vzb3MsIGlDb25mTWFzaXZhOiBhbnksIGliQmFyY29kZTogYm9vbGVhbixcclxuICAgICAgICBwcml2YXRlIG9Db3VjaFBSRFNTZXJ2aWNlOiBDb3VjaFBSRFNTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5vTTNQcm9jZXNvID0gaW9NM1Byb2Nlc287XHJcbiAgICAgICAgdGhpcy5nc0lkS2F0aW9zID0gaXNJZEthdGlvcztcclxuICAgICAgICB0aGlzLkNvbmZNYXNpdmEgPSBpQ29uZk1hc2l2YTtcclxuICAgICAgICB0aGlzLmdiQmFyQ29kZSA9IGliQmFyY29kZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0X3JvdW5kZWRfcHJvZ3Jlc3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91bmRlZF9wcm9ncmVzcztcclxuICAgIH1cclxuXHJcbiAgICAvLy9BZGljaW9uYXIgcHJvZHVjdG9zIGVuIG1hc2l2b1xyXG4gICAgcHVibGljIGFzeW5jIEFkaWNpb25hck1hc2l2byhvTTNDb3VjaE1hZXN0cm86IE0zQ291Y2hNYWVzdHJvLCBQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBvRGF0VXNlcjogYW55LCBvRGF0YVByb2M6IGFueSwgb00zVWJpY2FjaW9uOiBNM1ViaWNhY2lvbiA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLkdldFJlYWRlcihvRGF0YVByb2MpO1xyXG4gICAgICAgIGxldCBjc3Y6IHN0cmluZztcclxuICAgICAgICBpZiAoIXRoaXMucmVhZGVyKSB7XHJcbiAgICAgICAgICAgIGNzdiA9IG9EYXRhUHJvYy5UZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3N2ID0gdGhpcy5yZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBhcnJDU1Y6IEFycmF5PHN0cmluZz4gPSBjc3Yuc3BsaXQoXCJcXG5cIik7XHJcblxyXG4gICAgICAgIHZhciBwcm9jZXNvOiBbTTNQcm9jZXNvcywgc3RyaW5nXSA9IGF3YWl0IHRoaXMuYWRpY2lvbmFyX21hc2l2b19mcm9tX2FycmF5KG9NM0NvdWNoTWFlc3RybywgUG9zdFNlcnZpY2VNMywgb0RhdFVzZXIsIGFyckNTViwgb00zVWJpY2FjaW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc287XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNvcnJlIHkgYWRpY2lvbmEgbG9zIHByb2R1Y3RvcyBlbiB1biBhcnJheSBhIHVuIHByb2Nlc29cclxuICAgICAqIEBwYXJhbSBvTTNDb3VjaE1hZXN0cm8gXHJcbiAgICAgKiBAcGFyYW0gUG9zdFNlcnZpY2VNMyBcclxuICAgICAqIEBwYXJhbSBvRGF0VXNlciBcclxuICAgICAqIEBwYXJhbSBhcnJDU1YgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBhZGljaW9uYXJfbWFzaXZvX2Zyb21fYXJyYXkob00zQ291Y2hNYWVzdHJvOiBNM0NvdWNoTWFlc3RybywgUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgb0RhdFVzZXI6IGFueSwgYXJyQ1NWOiBBcnJheTxzdHJpbmc+LCBvTTNVYmljYWNpb246IE0zVWJpY2FjaW9uID0gbnVsbCwgYXBsRXhjOiBzdHJpbmcgPSBcIjBcIikge1xyXG5cclxuICAgICAgICBsZXQgdG90YWwgPSBhcnJDU1YubGVuZ3RoO1xyXG4gICAgICAgIGxldCBjb3VudCA9IDA7XHJcbiAgICAgICAgdmFyIHByb2R1Y3Q6IFR5cGVNM1ByZEdycFxyXG4gICAgICAgIHZhciBvU2VydmljZU0zTWFlc3RybyA9IG5ldyBTZXJ2aWNlTTNNYWVzdHJvKCk7XHJcbiAgICAgICAgdmFyIG9NM1JlZ1NlcnZpY2UgPSBuZXcgTTNSZWdTZXJ2aWNlKG9NM0NvdWNoTWFlc3RybywgUG9zdFNlcnZpY2VNMywgdGhpcy5nc0lkS2F0aW9zKTtcclxuICAgICAgICB2YXIgcHJkc0ZhaWxzOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBwcmRmYWlsYWN0dWFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgdmFyIHJlc3VsdDogYW55O1xyXG4gICAgICAgIGxldCBhcnJheVJlc3A6IFtNM1Byb2Nlc29zLCBzdHJpbmddID0gW3RoaXMub00zUHJvY2VzbywgXCJcIl07XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHByZGZhaWxhY3R1YWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIGxpbmU6IHN0cmluZyA9IGFyckNTVltpXTtcclxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBvZXN0cnVjdENTVjogZXN0cnVjdENTVjtcclxuICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWID0gdGhpcy5TZXRFc3RydWN0Q1NWKGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2JCYXJDb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcImZ1ZSBsb2NhbDogXCIgKyBvZXN0cnVjdENTVi5za3UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9Db3VjaFBSRFNTZXJ2aWNlLmdldChvZXN0cnVjdENTVi5za3UpLnRoZW4oYXN5bmMgcHJkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJvYnR1dm8gbG9jYWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHByZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvID0gbmV3IFNlcnZpY2VMb2FkTGlzdGFQcmVjaW8odGhpcy5nc0lkS2F0aW9zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG9TZXJ2aWNlTG9hZExpc3RhUHJlY2lvLkFzaWduYXJMaXN0YVByZWNpbyhwcmQuTGlzdENvZHMsIG9EYXRVc2VyLCBQb3N0U2VydmljZU0zKS50aGVuKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJhc2lnbm8gbHAgbG9jYWxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhwcmQuTGlzdENvZHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBwcmQuTGlzdENvZHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFzeW5jIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBscCAtIGludGVudG8gc2VydmVyOiBcIiArIG9lc3RydWN0Q1NWLnNrdSArIFwiOiBcIiArIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0geyBcImlkX3ViaWNhY2lvblwiOiBvRGF0VXNlci5Vc3VhcmlvU2lzdGVtYS5VQklDQUNJT04sIFwiQ29kaWdvXCI6IG9lc3RydWN0Q1NWLnNrdSB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0ID0gYXdhaXQgb1NlcnZpY2VNM01hZXN0cm8uR2V0X00zUHJvZHVjdG9Fc3BlY0J5Q29kZUFzeW5jKFBvc3RTZXJ2aWNlTTMsIHRoaXMuZ3NJZEthdGlvcywgZGF0YSwgb0RhdFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGNhdGNoIGxwOiBcIiArIG9lc3RydWN0Q1NWLnNrdSArIFwiOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyck1zZzogc3RyaW5nID0gZXJyLnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJkRmFpbCA9IGVyck1zZy5zdWJzdHJpbmcoZXJyTXNnLmluZGV4T2YoXCJDb2RpZ29cIikgKyA3KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmRzRmFpbHMgKz0gcHJkRmFpbCArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZGZhaWxhY3R1YWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcob00zVWJpY2FjaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKG9NM1ViaWNhY2lvbiAmJiBvTTNVYmljYWNpb24uSURVYmljYWNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvTTNVYmljYWNpb24gJiYgb00zVWJpY2FjaW9uLklEVWJpY2FjaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBhd2FpdCBvU2VydmljZU0zTWFlc3Ryby5NM0dldFByb2R1Y3RvQnlTS1VBc3luYyhQb3N0U2VydmljZU0zLCB0aGlzLmdzSWRLYXRpb3MsIG9lc3RydWN0Q1NWLnNrdSwgb0RhdFVzZXIsIG9NM1ViaWNhY2lvbi5JRFViaWNhY2lvbiwgYXBsRXhjKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBhd2FpdCBvU2VydmljZU0zTWFlc3Ryby5NM0dldFByb2R1Y3RvQnlTS1VBc3luYyhQb3N0U2VydmljZU0zLCB0aGlzLmdzSWRLYXRpb3MsIG9lc3RydWN0Q1NWLnNrdSwgb0RhdFVzZXIsIFwiLTFcIiwgYXBsRXhjKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhwcm9kdWN0KTtcclxuICAgICAgICAgICAgICAgIGlmICghcHJkZmFpbGFjdHVhbCAmJiBwcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRQcmVjaW9TaUFQbGljYShwcm9kdWN0LCBvZXN0cnVjdENTVik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5BZGRQcmRUb00zUHJvY2Vzbyhwcm9kdWN0LCBvZXN0cnVjdENTViwgb00zUmVnU2VydmljZSwgb0RhdFVzZXIsIG9NM1ViaWNhY2lvbik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBwcm9kdWN0IG5vIHNlIGxsZW5vOiBcIiArIG9lc3RydWN0Q1NWLnNrdSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzcyA9IGNvdW50ICogMTAwIC8gdG90YWw7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmRlZF9wcm9ncmVzcyA9IE1hdGgucm91bmQodGhpcy5wcm9ncmVzcyAqIDEwMCkgLyAxMDBcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyYXlSZXNwWzBdID0gdGhpcy5vTTNQcm9jZXNvO1xyXG4gICAgICAgIGFycmF5UmVzcFsxXSA9IHByZHNGYWlscztcclxuICAgICAgICByZXR1cm4gYXJyYXlSZXNwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ2FtYmlhciBwcmVjaW8gZGUgcHJvZHVjdG8uXHJcbiAgICBwdWJsaWMgc2V0UHJlY2lvU2lBUGxpY2EocHJvZHVjdDogVHlwZU0zUHJkR3JwLCBvZXN0cnVjdENTVjogZXN0cnVjdENTVikge1xyXG4gICAgICAgIGlmIChvZXN0cnVjdENTVi5wcmVjaW8gIT09IE5hTiAmJiBvZXN0cnVjdENTVi5wcmVjaW8gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwcm9kdWN0LkxvTTNQcmRHZW5lcmFsWzBdLkxvTTNQcmRMaXN0YS5QUkVDSU8gPSBvZXN0cnVjdENTVi5wcmVjaW87XHJcbiAgICAgICAgICAgIHByb2R1Y3QuTG9NM1ByZEdlbmVyYWxbMF0uTG9NM1ByZExpc3RhLk0zUHJlc2VudGFjaW9uZXMuZm9yRWFjaChvTTNQcmVzZW50YWNpb25lcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBvTTNQcmVzZW50YWNpb25lcy5WQUxPUiA9IG9lc3RydWN0Q1NWLnByZWNpbztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vQWRpY2lvbmFyIGEgbTNwcm9jZXNvLCBwcm9kdWN0byBlc3BlY2lmaWNvLCBzZSBlbnZpYSBjYW50aWRhZC5cclxuICAgIHB1YmxpYyBBZGRQcmRUb00zUHJvY2Vzbyhwcm9kdWN0OiBUeXBlTTNQcmRHcnAsIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWLCBvTTNSZWdTZXJ2aWNlOiBNM1JlZ1NlcnZpY2UsIG9EYXRVc2VyOiBhbnksIG9NM1ViaWNhY2lvbjogTTNVYmljYWNpb24gPSBudWxsKSB7XHJcbiAgICAgICAgdmFyIG9NM1BJdGVtc1dFQiA9IG5ldyBNM1BJdGVtc1dFQigpO1xyXG4gICAgICAgIG9NM1BJdGVtc1dFQi5kQ2FudGlkYWQgPSBvZXN0cnVjdENTVi5jYW50aWRhZDtcclxuICAgICAgICBpZiAob2VzdHJ1Y3RDU1YuUGF0aEltYWdlbikge1xyXG4gICAgICAgICAgICBvTTNQSXRlbXNXRUIuUGF0aEltYWdlbiA9IG9lc3RydWN0Q1NWLlBhdGhJbWFnZW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9NM1BJdGVtc1dFQiA9IG9NM1JlZ1NlcnZpY2UuTG9hZEFkaWNpb25hbGVzKG9NM1BJdGVtc1dFQiwgcHJvZHVjdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9NM1Byb2Nlc28uTTNFTkMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgLy8vUHJpbWVyYSB2ZXogXHJcbiAgICAgICAgICAgIC8vL05PIFNFIEVTVEEgRU5WSUFORE8gSU5GT1JNQUNJT04gREUgUFJPTU9DSU9ORVNcclxuICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvID0gb00zUmVnU2VydmljZS5Mb2FkTTNQcm9jZXNvRW1wdHlQREIocHJvZHVjdCwgb00zUEl0ZW1zV0VCLCBvRGF0VXNlciwgb00zVWJpY2FjaW9uLCBudWxsLCB0aGlzLm9NM1Byb2Nlc28pO1xyXG4gICAgICAgICAgICAvL0FncmVnYXIgZGluYW1pY2FzXHJcbiAgICAgICAgICAgIHRoaXMuQWRpY2lvbmFyRGluYW1pY2Eob2VzdHJ1Y3RDU1YpO1xyXG4gICAgICAgICAgICB0aGlzLkFkaWNpb25hclBlcnNvbmFzQVByb2Nlc28ob2VzdHJ1Y3RDU1YpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvTTNSZWdTZXJ2aWNlLkxvYWRNM1Byb2Nlc29Gcm9tRGF0YSh0aGlzLm9NM1Byb2Nlc28sIHByb2R1Y3QsIG9NM1BJdGVtc1dFQiwgb00zVWJpY2FjaW9uLCBudWxsLCBvRGF0VXNlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuQWRpY2lvbmFyRGV0YWxsZShvZXN0cnVjdENTVik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGljaW9uYXIgY2FwdHVyYXMgZGluYW1pY2FzXHJcbiAgICAgKiBAcGFyYW0gb2VzdHJ1Y3RDU1YgRXN0cnVjdHVyYSBjb24gaW5mb3JtYWNpb24gZGUgbGluZWEgYSBhZ3JlZ2FyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBBZGljaW9uYXJEaW5hbWljYShvZXN0cnVjdENTVjogZXN0cnVjdENTVikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBkaW5hbWljYXMgPSBvZXN0cnVjdENTVi5EaW5hbWljYXNcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaW5hbWljYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBvTTNQRGluYW1pY2FzID0gbmV3IE0zUERpbmFtaWNhcygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9NM1Byb2Nlc28ubE0zUERpbmFtaWNhcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5sTTNQRGluYW1pY2FzID0gbmV3IEFycmF5PE0zUERpbmFtaWNhcz4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9NM1BEaW5hbWljYXMuTm9tYnJlID0gZGluYW1pY2FzW2ldLkF0cmlidXRvO1xyXG4gICAgICAgICAgICAgICAgb00zUERpbmFtaWNhcy5WYWxvciA9IGRpbmFtaWNhc1tpXS5WYWxvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5sTTNQRGluYW1pY2FzLnB1c2gob00zUERpbmFtaWNhcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGFkaWNpb25hciBkaW5hbWljYVwiKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGljaW9uYXIgcGVyc29uYXMgYSBwcm9jZXNvXHJcbiAgICAgKiBAcGFyYW0gb2VzdHJ1Y3RDU1YgRXN0cnVjdHVyYSBjb24gaW5mb3JtYWNpb24gYSBhZ3JlZ2FyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBBZGljaW9uYXJQZXJzb25hc0FQcm9jZXNvKG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHBlcnNvbmFzID0gb2VzdHJ1Y3RDU1YuUGVyc29uYXM7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGVyc29uYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBvTTNQZXJYUHJvY2VzbyA9IG5ldyBNM1BlclhQcm9jZXNvKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub00zUHJvY2Vzby5NM1BlclhQcm9jZXNvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLk0zUGVyWFByb2Nlc28gPSBuZXcgQXJyYXk8TTNQZXJYUHJvY2Vzbz4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG9NM1BlclhQcm9jZXNvLlRkb2MgPSBwZXJzb25hc1tpXS5UZG9jO1xyXG4gICAgICAgICAgICAgICAgb00zUGVyWFByb2Nlc28uTmRvYyA9IHBlcnNvbmFzW2ldLk5kb2M7XHJcbiAgICAgICAgICAgICAgICBvTTNQZXJYUHJvY2Vzby5UaXBvUGVyc29uYSA9IHBlcnNvbmFzW2ldLkF0cmlidXRvO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLk0zUGVyWFByb2Nlc28ucHVzaChvTTNQZXJYUHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGFkaWNpb25hciBwZXJzb25hc1wiKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGljaW9uYXIgZGV0YWxsZSBhbCB1bHRpbW8gZW5jYWJlemFkbyBhZ3JlZ2Fkby5cclxuICAgICAqIEBwYXJhbSBvZXN0cnVjdENTViBFc3RydWN0dXJhIGNvbiBpbmZvcm1hY2lvbiBkZSBsaW5lYSBhIGFncmVnYXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIEFkaWNpb25hckRldGFsbGUob2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgZGV0YWxsZXMgPSBvZXN0cnVjdENTVi5NM0RldFxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRldGFsbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb00zUERldGFsbGVJdGVtcyA9IG5ldyBNM1BEZXRhbGxlSXRlbXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBvTTNQRGV0YWxsZUl0ZW1zLk5vbWJyZUNvbmNlcHRvID0gZGV0YWxsZXNbaV0uQXRyaWJ1dG87XHJcbiAgICAgICAgICAgICAgICBvTTNQRGV0YWxsZUl0ZW1zLlZhbG9yID0gZGV0YWxsZXNbaV0uVmFsb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28uTTNFTkNbdGhpcy5vTTNQcm9jZXNvLk0zRU5DLmxlbmd0aCAtIDFdLk0zREVULnB1c2gob00zUERldGFsbGVJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMub00zUHJvY2Vzby5NM0VOQy5maW5kKHggPT4geC5JZFByb2R1Y3RvID09IG9lc3RydWN0Q1NWLilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgYWRpY2lvbmFyIGRldGFsbGVcIilcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9PYnRlbmVyIHkgc2V0ZWFyIGxhIGluZm9ybWFjaW9uIGRlIGFyY2hpdm8gQ1NWIHkgc2VwYXJhZG9yLlxyXG4gICAgcHVibGljIEdldFJlYWRlcihvRGF0YVByb2M6IGFueSkge1xyXG4gICAgICAgIHRoaXMucmVhZGVyID0gb0RhdGFQcm9jLkNTVjtcclxuICAgICAgICB0aGlzLnNlcGFyYWRvciA9IG9EYXRhUHJvYy5TZXBhcmFkb3I7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLy9TZXRlYXIgZXN0cnVjdXRhciBkZSBDU1ZcclxuICAgIHB1YmxpYyBTZXRFc3RydWN0Q1NWKGxpbmU6IHN0cmluZykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBvZXN0cnVjdENTVjogZXN0cnVjdENTViA9IHsgXCJjYW50aWRhZFwiOiBudWxsLCBcInByZWNpb1wiOiBudWxsLCBcInNrdVwiOiBudWxsLCBcIlBhdGhJbWFnZW5cIjogbnVsbCwgXCJEaW5hbWljYXNcIjogW10sIFwiUGVyc29uYXNcIjogW10sIFwiTTNEZXRcIjogW10gfTtcclxuICAgICAgICAgICAgdmFyIG9BcnJDU1Y6IEFycmF5PHN0cmluZz4gPSBsaW5lLnNwbGl0KHRoaXMuc2VwYXJhZG9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLkNvbmZNYXNpdmEgJiYgdGhpcy5Db25mTWFzaXZhLkNvbHVtbmFzKSB7XHJcbiAgICAgICAgICAgICAgICBvZXN0cnVjdENTViA9IHRoaXMuRXN0cnVjdER5bmFtaWMob0FyckNTVik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvZXN0cnVjdENTViA9IHRoaXMuRXN0cnVjdERlZmF1bHQob0FyckNTVik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBvZXN0cnVjdENTVjtcclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGNyZWFuZG8gZXN0cnVjdHVyYS4gUmV2aXNhciBsaW5lYXNcIik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXN0cnVjdHVyYSBkaW5hbWljYSBkZSBjYXJndWUgbWFzaXZhXHJcbiAgICAgKiBAcGFyYW0gb0FyckNTViBhcnJlZ2xvIGNvbiBpbmZvcm1hY2lvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIEVzdHJ1Y3REeW5hbWljKG9BcnJDU1Y6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB2YXIgY29sdW1uYXM6IEFycmF5PGFueT4gPSB0aGlzLkNvbmZNYXNpdmEuQ29sdW1uYXM7XHJcbiAgICAgICAgdmFyIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWID0geyBcImNhbnRpZGFkXCI6IG51bGwsIFwicHJlY2lvXCI6IG51bGwsIFwic2t1XCI6IG51bGwsIFwiUGF0aEltYWdlblwiOiBudWxsLCBcIkRpbmFtaWNhc1wiOiBbXSwgXCJQZXJzb25hc1wiOiBbXSwgXCJNM0RldFwiOiBbXSB9O1xyXG5cclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbHVtbmFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uYXNbaV0uRXN0cnVjdHVyYSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkNhbnRpZGFkXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuY2FudGlkYWQgPSArb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiUHJlY2lvXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YucHJlY2lvID0gK29BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlNLVVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLnNrdSA9IG9BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIkRJTkFNSUNBXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpbiA9IHsgXCJBdHJpYnV0b1wiOiBjb2x1bW5hc1tpXS5BdHJpYnV0bywgXCJWYWxvclwiOiBvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLkRpbmFtaWNhcy5wdXNoKGRpbik7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiTTNERVRcIjpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbTNEZXQgPSB7IFwiQXRyaWJ1dG9cIjogY29sdW1uYXNbaV0uQXRyaWJ1dG8sIFwiVmFsb3JcIjogb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl0gfTtcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5NM0RldC5wdXNoKG0zRGV0KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJUSVBPUEVSU09OQVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWxvciA9IG9BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZG9jOiBzdHJpbmcgPSBcIjVcIjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmRvYzogc3RyaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsb3Iuc3BsaXQoXCItXCIpLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkb2MgPSB2YWxvci5zcGxpdChcIi1cIilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5kb2MgPSB2YWxvci5zcGxpdChcIi1cIilbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmRvYyA9IHZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcnNvbmEgPSB7IFwiQXRyaWJ1dG9cIjogY29sdW1uYXNbaV0uQXRyaWJ1dG8sIFwiVGRvY1wiOiB0ZG9jLCBcIk5kb2NcIjogbmRvYyB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLlBlcnNvbmFzLnB1c2gocGVyc29uYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZXN0cnVjdENTVjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzdHJ1Y3R1cmEgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSBvQXJyQ1NWIEFycmVnbG8gY29uIGluZm9ybWFjaW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBFc3RydWN0RGVmYXVsdChvQXJyQ1NWOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdmFyIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWID0geyBcImNhbnRpZGFkXCI6IG51bGwsIFwicHJlY2lvXCI6IG51bGwsIFwic2t1XCI6IG51bGwsIFwiUGF0aEltYWdlblwiOiBudWxsLCBcIkRpbmFtaWNhc1wiOiBbXSwgXCJQZXJzb25hc1wiOiBbXSwgXCJNM0RldFwiOiBbXSB9O1xyXG4gICAgICAgIC8vdmFyIG9BcnJDU1Y6IEFycmF5PHN0cmluZz4gPSBsaW5lLnNwbGl0KHRoaXMuc2VwYXJhZG9yKTtcclxuXHJcbiAgICAgICAgaWYgKG9BcnJDU1YubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgb2VzdHJ1Y3RDU1Yuc2t1ID0gb0FyckNTVlswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9BcnJDU1YubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuY2FudGlkYWQgPSArb0FyckNTVlsxXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvQXJyQ1NWLmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgICAgICAgIG9lc3RydWN0Q1NWLnByZWNpbyA9ICtvQXJyQ1NWWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob0FyckNTVi5sZW5ndGggPj0gNCkge1xyXG4gICAgICAgICAgICBvZXN0cnVjdENTVi5QYXRoSW1hZ2VuID0gb0FyckNTVlszXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9lc3RydWN0Q1NWO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIGVzdHJ1Y3RDU1Yge1xyXG4gICAgc2t1OiBzdHJpbmc7XHJcbiAgICBjYW50aWRhZDogbnVtYmVyO1xyXG4gICAgcHJlY2lvOiBudW1iZXI7XHJcbiAgICBQYXRoSW1hZ2VuOiBzdHJpbmc7XHJcbiAgICBEaW5hbWljYXM6IEFycmF5PGFueT47XHJcbiAgICBQZXJzb25hczogQXJyYXk8YW55PjtcclxuICAgIE0zRGV0OiBBcnJheTxhbnk+O1xyXG59Il19
@@ -35,6 +35,7 @@ var M3RegMasivo = /** @class */ (function () {
35
35
  * @param {?} PostServiceM3
36
36
  * @param {?} oDatUser
37
37
  * @param {?} oDataProc
38
+ * @param {?=} oM3Ubicacion
38
39
  * @return {?}
39
40
  */
40
41
  M3RegMasivo.prototype.AdicionarMasivo = /**
@@ -42,9 +43,11 @@ var M3RegMasivo = /** @class */ (function () {
42
43
  * @param {?} PostServiceM3
43
44
  * @param {?} oDatUser
44
45
  * @param {?} oDataProc
46
+ * @param {?=} oM3Ubicacion
45
47
  * @return {?}
46
48
  */
47
- function (oM3CouchMaestro, PostServiceM3, oDatUser, oDataProc) {
49
+ function (oM3CouchMaestro, PostServiceM3, oDatUser, oDataProc, oM3Ubicacion) {
50
+ if (oM3Ubicacion === void 0) { oM3Ubicacion = null; }
48
51
  return tslib_1.__awaiter(this, void 0, void 0, function () {
49
52
  var csv, arrCSV, proceso;
50
53
  return tslib_1.__generator(this, function (_a) {
@@ -58,7 +61,7 @@ var M3RegMasivo = /** @class */ (function () {
58
61
  csv = this.reader.result.toString();
59
62
  }
60
63
  arrCSV = csv.split("\n");
61
- return [4 /*yield*/, this.adicionar_masivo_from_array(oM3CouchMaestro, PostServiceM3, oDatUser, arrCSV)];
64
+ return [4 /*yield*/, this.adicionar_masivo_from_array(oM3CouchMaestro, PostServiceM3, oDatUser, arrCSV, oM3Ubicacion)];
62
65
  case 1:
63
66
  proceso = _a.sent();
64
67
  return [2 /*return*/, proceso];
@@ -513,4 +516,4 @@ function estructCSV_tsickle_Closure_declarations() {
513
516
  estructCSV.prototype.M3Det;
514
517
  }
515
518
 
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibTMtcmVnLW1hc2l2by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2YtcmVnbGFuZWdvY2lvbTMvIiwic291cmNlcyI6WyJsaWIvcm5tMy9TZXJ2aWNlcy9tMy1yZWctbWFzaXZvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxJQUFBO0lBVUkscUJBQVksVUFBa0IsRUFBRSxXQUF1QixFQUFFLFdBQWdCLEVBQUUsU0FBa0IsRUFDakY7UUFBQSxzQkFBaUIsR0FBakIsaUJBQWlCO3lCQVBELEdBQUc7MEJBQ1YsSUFBSSxVQUFVLEVBQUU7eUJBSVQsS0FBSztRQUc3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUM5Qjs7OztJQUVNLDBDQUFvQjs7OztRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0lBSXBCLHFDQUFlOzs7Ozs7O2NBQUMsZUFBK0IsRUFBRSxhQUE0QixFQUFFLFFBQWEsRUFBRSxTQUFjOzs7Ozs7d0JBQ3JILElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFOzRCQUNkLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO3lCQUN4Qjs2QkFDSTs0QkFDRCxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7eUJBQ3ZDO3dCQUNHLE1BQU0sR0FBa0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFFUixxQkFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUE7O3dCQUF4SCxPQUFPLEdBQXlCLFNBQXdGO3dCQUU1SCxzQkFBTyxPQUFPLEVBQUM7Ozs7Ozs7Ozs7Ozs7OztJQVVOLGlEQUEyQjs7Ozs7Ozs7OztjQUFDLGVBQStCLEVBQUUsYUFBNEIsRUFBRSxRQUFhLEVBQUUsTUFBcUIsRUFBRSxZQUFnQyxFQUFFLE1BQW9CO1FBQXRELDZCQUFBLEVBQUEsbUJBQWdDO1FBQUUsdUJBQUEsRUFBQSxZQUFvQjs7Ozs7Ozt3QkFFNUwsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7d0JBQ3RCLEtBQUssR0FBRyxDQUFDLENBQUM7d0JBRVYsaUJBQWlCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUMzQyxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2xGLFNBQVMsR0FBVyxFQUFFLENBQUM7d0JBQ3ZCLGFBQWEsR0FBRyxLQUFLLENBQUM7d0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO3dCQUVkLFNBQVMsR0FBeUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNuRCxDQUFDLEdBQUcsQ0FBQzs7OzZCQUFFLENBQUEsQ0FBQyxHQUFHLEtBQUssQ0FBQTt3QkFDckIsYUFBYSxHQUFHLEtBQUssQ0FBQzt3QkFDbEIsSUFBSSxHQUFXLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDekIsSUFBSSxFQUFKLHdCQUFJO3dCQUVKLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUNuQyxJQUFJLENBQUMsU0FBUyxFQUFkLHdCQUFjO3dCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDM0MscUJBQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQU0sR0FBRzs7Ozs7NENBQzVELE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7NENBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7NENBRWYsdUJBQXVCLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7NENBQzFFLHFCQUFNLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUM7b0RBQzFGLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvREFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7b0RBQzVCLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO2lEQUMxQixDQUFDLEVBQUE7OzRDQUpGLFNBSUUsQ0FBQzs7OztpQ0FFTixFQUFFLFVBQU0sS0FBSzs7Ozs7NENBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQzs0Q0FDMUUsSUFBSSxHQUFHLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7Ozs7NENBRTlFLHFCQUFNLGlCQUFpQixDQUFDLDhCQUE4QixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsRUFBQTs7NENBQWhILE9BQU8sR0FBRyxTQUFzRyxDQUFDOzs7OzRDQUVqSCxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEtBQUcsQ0FBQyxDQUFDOzRDQUM3RCxNQUFNLEdBQVcsS0FBRyxDQUFDLEdBQUcsQ0FBQzs0Q0FDekIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0Q0FDN0QsU0FBUyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7NENBQzNCLGFBQWEsR0FBRyxJQUFJLENBQUM7Ozs7O2lDQUU1QixDQUFDLEVBQUE7O3dCQXZCRixTQXVCRSxDQUFDOzs7d0JBR1AsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDOzZCQUNwRCxDQUFBLFlBQVksSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFBLEVBQXhDLHdCQUF3Qzt3QkFDOUIscUJBQU0saUJBQWlCLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBQTs7d0JBQXRKLE9BQU8sR0FBRyxTQUE0SSxDQUFDOzs0QkFHN0kscUJBQU0saUJBQWlCLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFBOzt3QkFBbEksT0FBTyxHQUFHLFNBQXdILENBQUM7Ozt3QkFJM0ksT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLGFBQWEsSUFBSSxPQUFPLEVBQUU7NEJBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7eUJBQ3ZGOzZCQUFNOzRCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUNsRTs7O3dCQUVMLEtBQUssRUFBRSxDQUFDO3dCQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBOzs7d0JBdER0QyxDQUFDLEVBQUUsQ0FBQTs7O3dCQXdEOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7d0JBQy9CLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7d0JBQ3pCLHNCQUFPLFNBQVMsRUFBQzs7Ozs7Ozs7OztJQUlkLHVDQUFpQjs7Ozs7Y0FBQyxPQUFxQixFQUFFLFdBQXVCO1FBQ25FLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDMUQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbkUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQUEsaUJBQWlCO2dCQUM3RSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQzthQUNoRCxDQUFDLENBQUM7U0FDTjs7Ozs7Ozs7OztJQUlFLHVDQUFpQjs7Ozs7Ozs7Y0FBQyxPQUFxQixFQUFFLFdBQXVCLEVBQUUsYUFBMkIsRUFBRSxRQUFhLEVBQUUsWUFBZ0M7UUFBaEMsNkJBQUEsRUFBQSxtQkFBZ0M7O1FBQ2pKLElBQUksWUFBWSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsWUFBWSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQzlDLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUN4QixZQUFZLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7U0FDcEQ7UUFDRCxZQUFZLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFcEUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBR25DLElBQUksQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDOztZQUU1SCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBRS9DO2FBQU07WUFDSCxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDN0c7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7Ozs7Ozs7SUFPaEMsdUNBQWlCOzs7OztjQUFDLFdBQXVCO1FBQzVDLElBQUk7O1lBQ0EsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQTtZQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7Z0JBQ3ZDLElBQUksYUFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtvQkFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7aUJBQzdEO2dCQUNELGFBQWEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDN0MsYUFBYSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDckQ7U0FDSjtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7U0FDbEI7Ozs7Ozs7SUFPRSwrQ0FBeUI7Ozs7O2NBQUMsV0FBdUI7UUFDcEQsSUFBSTs7WUFDQSxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOztnQkFDdEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFO29CQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssRUFBaUIsQ0FBQztpQkFDOUQ7Z0JBQ0QsY0FBYyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN2QyxjQUFjLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7UUFBQyxPQUFPLEVBQUUsRUFBRTtZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ2xCOzs7Ozs7O0lBT0Usc0NBQWdCOzs7OztjQUFDLFdBQXVCO1FBQzNDLElBQUk7O1lBQ0EsSUFBSSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQTtZQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7Z0JBQ3RDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFFN0MsZ0JBQWdCLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3ZELGdCQUFnQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzthQUV4RjtTQUNKO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUE7WUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtTQUNsQjs7Ozs7O0lBS0UsK0JBQVM7Ozs7Y0FBQyxTQUFjO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7Ozs7OztJQU1sQyxtQ0FBYTs7OztjQUFDLElBQVk7UUFDN0IsSUFBSTs7WUFDQSxJQUFJLFdBQVcsR0FBZSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQzs7WUFDbEosSUFBSSxPQUFPLEdBQWtCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQkFDN0MsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7aUJBQU07Z0JBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7WUFFRCxPQUFPLFdBQVcsQ0FBQztTQUN0QjtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDZjs7Ozs7OztJQU9FLG9DQUFjOzs7OztjQUFDLE9BQXNCOztRQUN4QyxJQUFJLFFBQVEsR0FBZSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQzs7UUFDcEQsSUFBSSxXQUFXLEdBQWUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFbEosS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFO2dCQUM1QixLQUFLLFVBQVU7b0JBQ1gsV0FBVyxDQUFDLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3RELE1BQU07Z0JBQ1YsS0FBSyxRQUFRO29CQUNULFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwRCxNQUFNO2dCQUNWLEtBQUssS0FBSztvQkFDTixXQUFXLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hELE1BQU07Z0JBQ1YsS0FBSyxVQUFVOztvQkFDWCxJQUFJLEdBQUcsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZGLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNoQyxNQUFNO2dCQUNWLEtBQUssT0FBTzs7b0JBQ1IsSUFBSSxLQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUN6RixXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDOUIsTUFBTTtnQkFDVixLQUFLLGFBQWE7O29CQUNkLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7O29CQUMxQyxJQUFJLElBQUksR0FBVyxHQUFHLENBQUM7O29CQUN2QixJQUFJLElBQUksQ0FBUztvQkFFakIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQzlCLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDOUI7eUJBQU07d0JBQ0gsSUFBSSxHQUFHLEtBQUssQ0FBQztxQkFDaEI7O29CQUVELElBQUksT0FBTyxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQy9FLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNuQyxNQUFNO2dCQUNWO29CQUNJLE1BQU07YUFDYjtTQUNKO1FBQ0QsT0FBTyxXQUFXLENBQUM7Ozs7Ozs7SUFPaEIsb0NBQWM7Ozs7O2NBQUMsT0FBc0I7O1FBQ3hDLElBQUksV0FBVyxHQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDOztRQUdsSixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sV0FBVyxDQUFDOztzQkExVTNCO0lBOFVDLENBQUE7QUFqVUQsdUJBaVVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTTNQSXRlbXNXRUIsIE0zUERldGFsbGVJdGVtcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wZGV0YWxsZS1pdGVtc1wiO1xyXG5pbXBvcnQgeyBUeXBlTTNQcmRHcnAgfSBmcm9tIFwiLi4vTWFlc3Ryby9NM1ByZEdycC50eXBlXCI7XHJcbmltcG9ydCB7IE0zUmVnU2VydmljZSB9IGZyb20gXCIuL20zLXJlZy1zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE0zQ291Y2hNYWVzdHJvIH0gZnJvbSBcIi4uL0RhdGEvbTMtY291Y2gtbWFlc3Ryb1wiO1xyXG5pbXBvcnQgeyBQb3N0U2VydmljZU0zIH0gZnJvbSBcIi4uLy4uL0NvbmV4aW9uU1FML3Bvc3RzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2VydmljZU0zTWFlc3RybyB9IGZyb20gXCIuL00zTWFlc3Ryby5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE0zUHJvY2Vzb3MgfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcHJvY2Vzb3NcIjtcclxuaW1wb3J0IHsgTTNQRGluYW1pY2FzIH0gZnJvbSBcIi4uL1JlZ2lzdHJvL20zLXBkaW5hbWljYXNcIjtcclxuaW1wb3J0IHsgTTNQZXJYUHJvY2VzbyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wZXIteC1wcm9jZXNvXCI7XHJcbmltcG9ydCB7IE0zVWJpY2FjaW9uIH0gZnJvbSBcIi4uL01hZXN0cm8vVWJpY2FjaW9uL00zVWJpY2FjaW9uLnR5cGVcIjtcclxuaW1wb3J0IHsgU2VydmljZUxvYWRMaXN0YVByZWNpbyB9IGZyb20gXCIuL20zLWxvYWQtbC1wcmVjaW8uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDb3VjaFBSRFNTZXJ2aWNlIH0gZnJvbSBcIi4uL09mZmxpbmUvY291Y2gtcHJkcy5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTTNSZWdNYXNpdm8ge1xyXG5cclxuICAgIHByaXZhdGUgZ3NJZEthdGlvczogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSByZWFkZXI6IEZpbGVSZWFkZXI7XHJcbiAgICBwcml2YXRlIHNlcGFyYWRvcjogc3RyaW5nID0gXCIsXCI7XHJcbiAgICBwcml2YXRlIG9NM1Byb2Nlc28gPSBuZXcgTTNQcm9jZXNvcygpO1xyXG4gICAgcHJpdmF0ZSBwcm9ncmVzczogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBDb25mTWFzaXZhOiBhbnk7XHJcbiAgICBwdWJsaWMgcm91bmRlZF9wcm9ncmVzczogbnVtYmVyO1xyXG4gICAgcHVibGljIGdiQmFyQ29kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IoaXNJZEthdGlvczogc3RyaW5nLCBpb00zUHJvY2VzbzogTTNQcm9jZXNvcywgaUNvbmZNYXNpdmE6IGFueSwgaWJCYXJjb2RlOiBib29sZWFuLFxyXG4gICAgICAgIHByaXZhdGUgb0NvdWNoUFJEU1NlcnZpY2U6IENvdWNoUFJEU1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLm9NM1Byb2Nlc28gPSBpb00zUHJvY2VzbztcclxuICAgICAgICB0aGlzLmdzSWRLYXRpb3MgPSBpc0lkS2F0aW9zO1xyXG4gICAgICAgIHRoaXMuQ29uZk1hc2l2YSA9IGlDb25mTWFzaXZhO1xyXG4gICAgICAgIHRoaXMuZ2JCYXJDb2RlID0gaWJCYXJjb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRfcm91bmRlZF9wcm9ncmVzcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yb3VuZGVkX3Byb2dyZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vL0FkaWNpb25hciBwcm9kdWN0b3MgZW4gbWFzaXZvXHJcbiAgICBwdWJsaWMgYXN5bmMgQWRpY2lvbmFyTWFzaXZvKG9NM0NvdWNoTWFlc3RybzogTTNDb3VjaE1hZXN0cm8sIFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIG9EYXRVc2VyOiBhbnksIG9EYXRhUHJvYzogYW55KSB7XHJcbiAgICAgICAgdGhpcy5HZXRSZWFkZXIob0RhdGFQcm9jKTtcclxuICAgICAgICBsZXQgY3N2OiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRlcikge1xyXG4gICAgICAgICAgICBjc3YgPSBvRGF0YVByb2MuVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNzdiA9IHRoaXMucmVhZGVyLnJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXJyQ1NWOiBBcnJheTxzdHJpbmc+ID0gY3N2LnNwbGl0KFwiXFxuXCIpO1xyXG5cclxuICAgICAgICB2YXIgcHJvY2VzbzogW00zUHJvY2Vzb3MsIHN0cmluZ10gPSBhd2FpdCB0aGlzLmFkaWNpb25hcl9tYXNpdm9fZnJvbV9hcnJheShvTTNDb3VjaE1hZXN0cm8sIFBvc3RTZXJ2aWNlTTMsIG9EYXRVc2VyLCBhcnJDU1YpO1xyXG5cclxuICAgICAgICByZXR1cm4gcHJvY2VzbztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlY29ycmUgeSBhZGljaW9uYSBsb3MgcHJvZHVjdG9zIGVuIHVuIGFycmF5IGEgdW4gcHJvY2Vzb1xyXG4gICAgICogQHBhcmFtIG9NM0NvdWNoTWFlc3RybyBcclxuICAgICAqIEBwYXJhbSBQb3N0U2VydmljZU0zIFxyXG4gICAgICogQHBhcmFtIG9EYXRVc2VyIFxyXG4gICAgICogQHBhcmFtIGFyckNTViBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIGFkaWNpb25hcl9tYXNpdm9fZnJvbV9hcnJheShvTTNDb3VjaE1hZXN0cm86IE0zQ291Y2hNYWVzdHJvLCBQb3N0U2VydmljZU0zOiBQb3N0U2VydmljZU0zLCBvRGF0VXNlcjogYW55LCBhcnJDU1Y6IEFycmF5PHN0cmluZz4sIG9NM1ViaWNhY2lvbjogTTNVYmljYWNpb24gPSBudWxsLCBhcGxFeGM6IHN0cmluZyA9IFwiMFwiKSB7XHJcblxyXG4gICAgICAgIGxldCB0b3RhbCA9IGFyckNTVi5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gMDtcclxuICAgICAgICB2YXIgcHJvZHVjdDogVHlwZU0zUHJkR3JwXHJcbiAgICAgICAgdmFyIG9TZXJ2aWNlTTNNYWVzdHJvID0gbmV3IFNlcnZpY2VNM01hZXN0cm8oKTtcclxuICAgICAgICB2YXIgb00zUmVnU2VydmljZSA9IG5ldyBNM1JlZ1NlcnZpY2Uob00zQ291Y2hNYWVzdHJvLCBQb3N0U2VydmljZU0zLCB0aGlzLmdzSWRLYXRpb3MpO1xyXG4gICAgICAgIHZhciBwcmRzRmFpbHM6IHN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IHByZGZhaWxhY3R1YWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuICAgICAgICB2YXIgcmVzdWx0OiBhbnk7XHJcbiAgICAgICAgbGV0IGFycmF5UmVzcDogW00zUHJvY2Vzb3MsIHN0cmluZ10gPSBbdGhpcy5vTTNQcm9jZXNvLCBcIlwiXTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsOyBpKyspIHtcclxuICAgICAgICAgICAgcHJkZmFpbGFjdHVhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgbGluZTogc3RyaW5nID0gYXJyQ1NWW2ldO1xyXG4gICAgICAgICAgICBpZiAobGluZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWO1xyXG4gICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YgPSB0aGlzLlNldEVzdHJ1Y3RDU1YobGluZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nYkJhckNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiZnVlIGxvY2FsOiBcIiArIG9lc3RydWN0Q1NWLnNrdSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub0NvdWNoUFJEU1NlcnZpY2UuZ2V0KG9lc3RydWN0Q1NWLnNrdSkudGhlbihhc3luYyBwcmQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcIm9idHV2byBsb2NhbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcocHJkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8gPSBuZXcgU2VydmljZUxvYWRMaXN0YVByZWNpbyh0aGlzLmdzSWRLYXRpb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgb1NlcnZpY2VMb2FkTGlzdGFQcmVjaW8uQXNpZ25hckxpc3RhUHJlY2lvKHByZC5MaXN0Q29kcywgb0RhdFVzZXIsIFBvc3RTZXJ2aWNlTTMpLnRoZW4oeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcImFzaWdubyBscCBsb2NhbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHByZC5MaXN0Q29kcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCA9IHByZC5MaXN0Q29kcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgYXN5bmMgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIGxwIC0gaW50ZW50byBzZXJ2ZXI6IFwiICsgb2VzdHJ1Y3RDU1Yuc2t1ICsgXCI6IFwiICsgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB7IFwiaWRfdWJpY2FjaW9uXCI6IG9EYXRVc2VyLlVzdWFyaW9TaXN0ZW1hLlVCSUNBQ0lPTiwgXCJDb2RpZ29cIjogb2VzdHJ1Y3RDU1Yuc2t1IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QgPSBhd2FpdCBvU2VydmljZU0zTWFlc3Ryby5HZXRfTTNQcm9kdWN0b0VzcGVjQnlDb2RlQXN5bmMoUG9zdFNlcnZpY2VNMywgdGhpcy5nc0lkS2F0aW9zLCBkYXRhLCBvRGF0VXNlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgY2F0Y2ggbHA6IFwiICsgb2VzdHJ1Y3RDU1Yuc2t1ICsgXCI6IFwiICsgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyTXNnOiBzdHJpbmcgPSBlcnIudXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmRGYWlsID0gZXJyTXNnLnN1YnN0cmluZyhlcnJNc2cuaW5kZXhPZihcIkNvZGlnb1wiKSArIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZHNGYWlscyArPSBwcmRGYWlsICsgXCIsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJkZmFpbGFjdHVhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhvTTNVYmljYWNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcob00zVWJpY2FjaW9uICYmIG9NM1ViaWNhY2lvbi5JRFViaWNhY2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9NM1ViaWNhY2lvbiAmJiBvTTNVYmljYWNpb24uSURVYmljYWNpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCA9IGF3YWl0IG9TZXJ2aWNlTTNNYWVzdHJvLk0zR2V0UHJvZHVjdG9CeVNLVUFzeW5jKFBvc3RTZXJ2aWNlTTMsIHRoaXMuZ3NJZEthdGlvcywgb2VzdHJ1Y3RDU1Yuc2t1LCBvRGF0VXNlciwgb00zVWJpY2FjaW9uLklEVWJpY2FjaW9uLCBhcGxFeGMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCA9IGF3YWl0IG9TZXJ2aWNlTTNNYWVzdHJvLk0zR2V0UHJvZHVjdG9CeVNLVUFzeW5jKFBvc3RTZXJ2aWNlTTMsIHRoaXMuZ3NJZEthdGlvcywgb2VzdHJ1Y3RDU1Yuc2t1LCBvRGF0VXNlciwgXCItMVwiLCBhcGxFeGMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKHByb2R1Y3QpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmRmYWlsYWN0dWFsICYmIHByb2R1Y3QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFByZWNpb1NpQVBsaWNhKHByb2R1Y3QsIG9lc3RydWN0Q1NWKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkFkZFByZFRvTTNQcm9jZXNvKHByb2R1Y3QsIG9lc3RydWN0Q1NWLCBvTTNSZWdTZXJ2aWNlLCBvRGF0VXNlciwgb00zVWJpY2FjaW9uKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yIHByb2R1Y3Qgbm8gc2UgbGxlbm86IFwiICsgb2VzdHJ1Y3RDU1Yuc2t1KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb3VudCsrO1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzID0gY291bnQgKiAxMDAgLyB0b3RhbDtcclxuICAgICAgICAgICAgdGhpcy5yb3VuZGVkX3Byb2dyZXNzID0gTWF0aC5yb3VuZCh0aGlzLnByb2dyZXNzICogMTAwKSAvIDEwMFxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnJheVJlc3BbMF0gPSB0aGlzLm9NM1Byb2Nlc287XHJcbiAgICAgICAgYXJyYXlSZXNwWzFdID0gcHJkc0ZhaWxzO1xyXG4gICAgICAgIHJldHVybiBhcnJheVJlc3A7XHJcbiAgICB9XHJcblxyXG4gICAgLy9DYW1iaWFyIHByZWNpbyBkZSBwcm9kdWN0by5cclxuICAgIHB1YmxpYyBzZXRQcmVjaW9TaUFQbGljYShwcm9kdWN0OiBUeXBlTTNQcmRHcnAsIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWKSB7XHJcbiAgICAgICAgaWYgKG9lc3RydWN0Q1NWLnByZWNpbyAhPT0gTmFOICYmIG9lc3RydWN0Q1NWLnByZWNpbyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByb2R1Y3QuTG9NM1ByZEdlbmVyYWxbMF0uTG9NM1ByZExpc3RhLlBSRUNJTyA9IG9lc3RydWN0Q1NWLnByZWNpbztcclxuICAgICAgICAgICAgcHJvZHVjdC5Mb00zUHJkR2VuZXJhbFswXS5Mb00zUHJkTGlzdGEuTTNQcmVzZW50YWNpb25lcy5mb3JFYWNoKG9NM1ByZXNlbnRhY2lvbmVzID0+IHtcclxuICAgICAgICAgICAgICAgIG9NM1ByZXNlbnRhY2lvbmVzLlZBTE9SID0gb2VzdHJ1Y3RDU1YucHJlY2lvO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9BZGljaW9uYXIgYSBtM3Byb2Nlc28sIHByb2R1Y3RvIGVzcGVjaWZpY28sIHNlIGVudmlhIGNhbnRpZGFkLlxyXG4gICAgcHVibGljIEFkZFByZFRvTTNQcm9jZXNvKHByb2R1Y3Q6IFR5cGVNM1ByZEdycCwgb2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YsIG9NM1JlZ1NlcnZpY2U6IE0zUmVnU2VydmljZSwgb0RhdFVzZXI6IGFueSwgb00zVWJpY2FjaW9uOiBNM1ViaWNhY2lvbiA9IG51bGwpIHtcclxuICAgICAgICB2YXIgb00zUEl0ZW1zV0VCID0gbmV3IE0zUEl0ZW1zV0VCKCk7XHJcbiAgICAgICAgb00zUEl0ZW1zV0VCLmRDYW50aWRhZCA9IG9lc3RydWN0Q1NWLmNhbnRpZGFkO1xyXG4gICAgICAgIGlmIChvZXN0cnVjdENTVi5QYXRoSW1hZ2VuKSB7XHJcbiAgICAgICAgICAgIG9NM1BJdGVtc1dFQi5QYXRoSW1hZ2VuID0gb2VzdHJ1Y3RDU1YuUGF0aEltYWdlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb00zUEl0ZW1zV0VCID0gb00zUmVnU2VydmljZS5Mb2FkQWRpY2lvbmFsZXMob00zUEl0ZW1zV0VCLCBwcm9kdWN0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub00zUHJvY2Vzby5NM0VOQy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAvLy9QcmltZXJhIHZleiBcclxuICAgICAgICAgICAgLy8vTk8gU0UgRVNUQSBFTlZJQU5ETyBJTkZPUk1BQ0lPTiBERSBQUk9NT0NJT05FU1xyXG4gICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28gPSBvTTNSZWdTZXJ2aWNlLkxvYWRNM1Byb2Nlc29FbXB0eVBEQihwcm9kdWN0LCBvTTNQSXRlbXNXRUIsIG9EYXRVc2VyLCBvTTNVYmljYWNpb24sIG51bGwsIHRoaXMub00zUHJvY2Vzbyk7XHJcbiAgICAgICAgICAgIC8vQWdyZWdhciBkaW5hbWljYXNcclxuICAgICAgICAgICAgdGhpcy5BZGljaW9uYXJEaW5hbWljYShvZXN0cnVjdENTVik7XHJcbiAgICAgICAgICAgIHRoaXMuQWRpY2lvbmFyUGVyc29uYXNBUHJvY2VzbyhvZXN0cnVjdENTVik7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9NM1JlZ1NlcnZpY2UuTG9hZE0zUHJvY2Vzb0Zyb21EYXRhKHRoaXMub00zUHJvY2VzbywgcHJvZHVjdCwgb00zUEl0ZW1zV0VCLCBvTTNVYmljYWNpb24sIG51bGwsIG9EYXRVc2VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5BZGljaW9uYXJEZXRhbGxlKG9lc3RydWN0Q1NWKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkaWNpb25hciBjYXB0dXJhcyBkaW5hbWljYXNcclxuICAgICAqIEBwYXJhbSBvZXN0cnVjdENTViBFc3RydWN0dXJhIGNvbiBpbmZvcm1hY2lvbiBkZSBsaW5lYSBhIGFncmVnYXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIEFkaWNpb25hckRpbmFtaWNhKG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGRpbmFtaWNhcyA9IG9lc3RydWN0Q1NWLkRpbmFtaWNhc1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpbmFtaWNhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9NM1BEaW5hbWljYXMgPSBuZXcgTTNQRGluYW1pY2FzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMub00zUHJvY2Vzby5sTTNQRGluYW1pY2FzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLmxNM1BEaW5hbWljYXMgPSBuZXcgQXJyYXk8TTNQRGluYW1pY2FzPigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb00zUERpbmFtaWNhcy5Ob21icmUgPSBkaW5hbWljYXNbaV0uQXRyaWJ1dG87XHJcbiAgICAgICAgICAgICAgICBvTTNQRGluYW1pY2FzLlZhbG9yID0gZGluYW1pY2FzW2ldLlZhbG9yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLmxNM1BEaW5hbWljYXMucHVzaChvTTNQRGluYW1pY2FzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgYWRpY2lvbmFyIGRpbmFtaWNhXCIpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkaWNpb25hciBwZXJzb25hcyBhIHByb2Nlc29cclxuICAgICAqIEBwYXJhbSBvZXN0cnVjdENTViBFc3RydWN0dXJhIGNvbiBpbmZvcm1hY2lvbiBhIGFncmVnYXJcclxuICAgICAqL1xyXG4gICAgcHVibGljIEFkaWNpb25hclBlcnNvbmFzQVByb2Nlc28ob2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgcGVyc29uYXMgPSBvZXN0cnVjdENTVi5QZXJzb25hcztcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwZXJzb25hcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9NM1BlclhQcm9jZXNvID0gbmV3IE0zUGVyWFByb2Nlc28oKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vTTNQcm9jZXNvLk0zUGVyWFByb2Nlc28pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28uTTNQZXJYUHJvY2VzbyA9IG5ldyBBcnJheTxNM1BlclhQcm9jZXNvPigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgb00zUGVyWFByb2Nlc28uVGRvYyA9IHBlcnNvbmFzW2ldLlRkb2M7XHJcbiAgICAgICAgICAgICAgICBvTTNQZXJYUHJvY2Vzby5OZG9jID0gcGVyc29uYXNbaV0uTmRvYztcclxuICAgICAgICAgICAgICAgIG9NM1BlclhQcm9jZXNvLlRpcG9QZXJzb25hID0gcGVyc29uYXNbaV0uQXRyaWJ1dG87XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28uTTNQZXJYUHJvY2Vzby5wdXNoKG9NM1BlclhQcm9jZXNvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgYWRpY2lvbmFyIHBlcnNvbmFzXCIpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkaWNpb25hciBkZXRhbGxlIGFsIHVsdGltbyBlbmNhYmV6YWRvIGFncmVnYWRvLlxyXG4gICAgICogQHBhcmFtIG9lc3RydWN0Q1NWIEVzdHJ1Y3R1cmEgY29uIGluZm9ybWFjaW9uIGRlIGxpbmVhIGEgYWdyZWdhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQWRpY2lvbmFyRGV0YWxsZShvZXN0cnVjdENTVjogZXN0cnVjdENTVikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBkZXRhbGxlcyA9IG9lc3RydWN0Q1NWLk0zRGV0XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGV0YWxsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBvTTNQRGV0YWxsZUl0ZW1zID0gbmV3IE0zUERldGFsbGVJdGVtcygpO1xyXG5cclxuICAgICAgICAgICAgICAgIG9NM1BEZXRhbGxlSXRlbXMuTm9tYnJlQ29uY2VwdG8gPSBkZXRhbGxlc1tpXS5BdHJpYnV0bztcclxuICAgICAgICAgICAgICAgIG9NM1BEZXRhbGxlSXRlbXMuVmFsb3IgPSBkZXRhbGxlc1tpXS5WYWxvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5NM0VOQ1t0aGlzLm9NM1Byb2Nlc28uTTNFTkMubGVuZ3RoIC0gMV0uTTNERVQucHVzaChvTTNQRGV0YWxsZUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5vTTNQcm9jZXNvLk0zRU5DLmZpbmQoeCA9PiB4LklkUHJvZHVjdG8gPT0gb2VzdHJ1Y3RDU1YuKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciBhZGljaW9uYXIgZGV0YWxsZVwiKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL09idGVuZXIgeSBzZXRlYXIgbGEgaW5mb3JtYWNpb24gZGUgYXJjaGl2byBDU1YgeSBzZXBhcmFkb3IuXHJcbiAgICBwdWJsaWMgR2V0UmVhZGVyKG9EYXRhUHJvYzogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yZWFkZXIgPSBvRGF0YVByb2MuQ1NWO1xyXG4gICAgICAgIHRoaXMuc2VwYXJhZG9yID0gb0RhdGFQcm9jLlNlcGFyYWRvcjtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vL1NldGVhciBlc3RydWN1dGFyIGRlIENTVlxyXG4gICAgcHVibGljIFNldEVzdHJ1Y3RDU1YobGluZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWID0geyBcImNhbnRpZGFkXCI6IG51bGwsIFwicHJlY2lvXCI6IG51bGwsIFwic2t1XCI6IG51bGwsIFwiUGF0aEltYWdlblwiOiBudWxsLCBcIkRpbmFtaWNhc1wiOiBbXSwgXCJQZXJzb25hc1wiOiBbXSwgXCJNM0RldFwiOiBbXSB9O1xyXG4gICAgICAgICAgICB2YXIgb0FyckNTVjogQXJyYXk8c3RyaW5nPiA9IGxpbmUuc3BsaXQodGhpcy5zZXBhcmFkb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuQ29uZk1hc2l2YSAmJiB0aGlzLkNvbmZNYXNpdmEuQ29sdW1uYXMpIHtcclxuICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWID0gdGhpcy5Fc3RydWN0RHluYW1pYyhvQXJyQ1NWKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWID0gdGhpcy5Fc3RydWN0RGVmYXVsdChvQXJyQ1NWKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG9lc3RydWN0Q1NWO1xyXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgY3JlYW5kbyBlc3RydWN0dXJhLiBSZXZpc2FyIGxpbmVhc1wiKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3RydWN0dXJhIGRpbmFtaWNhIGRlIGNhcmd1ZSBtYXNpdmFcclxuICAgICAqIEBwYXJhbSBvQXJyQ1NWIGFycmVnbG8gY29uIGluZm9ybWFjaW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgRXN0cnVjdER5bmFtaWMob0FyckNTVjogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIHZhciBjb2x1bW5hczogQXJyYXk8YW55PiA9IHRoaXMuQ29uZk1hc2l2YS5Db2x1bW5hcztcclxuICAgICAgICB2YXIgb2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YgPSB7IFwiY2FudGlkYWRcIjogbnVsbCwgXCJwcmVjaW9cIjogbnVsbCwgXCJza3VcIjogbnVsbCwgXCJQYXRoSW1hZ2VuXCI6IG51bGwsIFwiRGluYW1pY2FzXCI6IFtdLCBcIlBlcnNvbmFzXCI6IFtdLCBcIk0zRGV0XCI6IFtdIH07XHJcblxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1uYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgc3dpdGNoIChjb2x1bW5hc1tpXS5Fc3RydWN0dXJhKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiQ2FudGlkYWRcIjpcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5jYW50aWRhZCA9ICtvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJQcmVjaW9cIjpcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5wcmVjaW8gPSArb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiU0tVXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1Yuc2t1ID0gb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiRElOQU1JQ0FcIjpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGluID0geyBcIkF0cmlidXRvXCI6IGNvbHVtbmFzW2ldLkF0cmlidXRvLCBcIlZhbG9yXCI6IG9BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dIH07XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuRGluYW1pY2FzLnB1c2goZGluKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJNM0RFVFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtM0RldCA9IHsgXCJBdHJpYnV0b1wiOiBjb2x1bW5hc1tpXS5BdHJpYnV0bywgXCJWYWxvclwiOiBvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLk0zRGV0LnB1c2gobTNEZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlRJUE9QRVJTT05BXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbG9yID0gb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRkb2M6IHN0cmluZyA9IFwiNVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZG9jOiBzdHJpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxvci5zcGxpdChcIi1cIikubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGRvYyA9IHZhbG9yLnNwbGl0KFwiLVwiKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmRvYyA9IHZhbG9yLnNwbGl0KFwiLVwiKVswXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZG9jID0gdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgcGVyc29uYSA9IHsgXCJBdHJpYnV0b1wiOiBjb2x1bW5hc1tpXS5BdHJpYnV0bywgXCJUZG9jXCI6IHRkb2MsIFwiTmRvY1wiOiBuZG9jIH07XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuUGVyc29uYXMucHVzaChwZXJzb25hKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9lc3RydWN0Q1NWO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXN0cnVjdHVyYSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIG9BcnJDU1YgQXJyZWdsbyBjb24gaW5mb3JtYWNpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIEVzdHJ1Y3REZWZhdWx0KG9BcnJDU1Y6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB2YXIgb2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YgPSB7IFwiY2FudGlkYWRcIjogbnVsbCwgXCJwcmVjaW9cIjogbnVsbCwgXCJza3VcIjogbnVsbCwgXCJQYXRoSW1hZ2VuXCI6IG51bGwsIFwiRGluYW1pY2FzXCI6IFtdLCBcIlBlcnNvbmFzXCI6IFtdLCBcIk0zRGV0XCI6IFtdIH07XHJcbiAgICAgICAgLy92YXIgb0FyckNTVjogQXJyYXk8c3RyaW5nPiA9IGxpbmUuc3BsaXQodGhpcy5zZXBhcmFkb3IpO1xyXG5cclxuICAgICAgICBpZiAob0FyckNTVi5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICBvZXN0cnVjdENTVi5za3UgPSBvQXJyQ1NWWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAob0FyckNTVi5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgICBvZXN0cnVjdENTVi5jYW50aWRhZCA9ICtvQXJyQ1NWWzFdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9BcnJDU1YubGVuZ3RoID49IDMpIHtcclxuICAgICAgICAgICAgb2VzdHJ1Y3RDU1YucHJlY2lvID0gK29BcnJDU1ZbMl07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvQXJyQ1NWLmxlbmd0aCA+PSA0KSB7XHJcbiAgICAgICAgICAgIG9lc3RydWN0Q1NWLlBhdGhJbWFnZW4gPSBvQXJyQ1NWWzNdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2VzdHJ1Y3RDU1Y7XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgZXN0cnVjdENTViB7XHJcbiAgICBza3U6IHN0cmluZztcclxuICAgIGNhbnRpZGFkOiBudW1iZXI7XHJcbiAgICBwcmVjaW86IG51bWJlcjtcclxuICAgIFBhdGhJbWFnZW46IHN0cmluZztcclxuICAgIERpbmFtaWNhczogQXJyYXk8YW55PjtcclxuICAgIFBlcnNvbmFzOiBBcnJheTxhbnk+O1xyXG4gICAgTTNEZXQ6IEFycmF5PGFueT47XHJcbn0iXX0=
519
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibTMtcmVnLW1hc2l2by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2YtcmVnbGFuZWdvY2lvbTMvIiwic291cmNlcyI6WyJsaWIvcm5tMy9TZXJ2aWNlcy9tMy1yZWctbWFzaXZvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdwRSxJQUFBO0lBVUkscUJBQVksVUFBa0IsRUFBRSxXQUF1QixFQUFFLFdBQWdCLEVBQUUsU0FBa0IsRUFDakY7UUFBQSxzQkFBaUIsR0FBakIsaUJBQWlCO3lCQVBELEdBQUc7MEJBQ1YsSUFBSSxVQUFVLEVBQUU7eUJBSVQsS0FBSztRQUc3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUM5Qjs7OztJQUVNLDBDQUFvQjs7OztRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7OztJQUlwQixxQ0FBZTs7Ozs7Ozs7Y0FBQyxlQUErQixFQUFFLGFBQTRCLEVBQUUsUUFBYSxFQUFFLFNBQWMsRUFBRSxZQUFn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SUFBSSxXQUFXLEdBQWUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7O1FBR2xKLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDckIsV0FBVyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3JCLFdBQVcsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxXQUFXLENBQUM7O3NCQTFVM0I7SUE4VUMsQ0FBQTtBQWpVRCx1QkFpVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNM1BJdGVtc1dFQiwgTTNQRGV0YWxsZUl0ZW1zIH0gZnJvbSBcIi4uL1JlZ2lzdHJvL20zLXBkZXRhbGxlLWl0ZW1zXCI7XHJcbmltcG9ydCB7IFR5cGVNM1ByZEdycCB9IGZyb20gXCIuLi9NYWVzdHJvL00zUHJkR3JwLnR5cGVcIjtcclxuaW1wb3J0IHsgTTNSZWdTZXJ2aWNlIH0gZnJvbSBcIi4vbTMtcmVnLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTTNDb3VjaE1hZXN0cm8gfSBmcm9tIFwiLi4vRGF0YS9tMy1jb3VjaC1tYWVzdHJvXCI7XHJcbmltcG9ydCB7IFBvc3RTZXJ2aWNlTTMgfSBmcm9tIFwiLi4vLi4vQ29uZXhpb25TUUwvcG9zdHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlTTNNYWVzdHJvIH0gZnJvbSBcIi4vTTNNYWVzdHJvLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTTNQcm9jZXNvcyB9IGZyb20gXCIuLi9SZWdpc3Ryby9tMy1wcm9jZXNvc1wiO1xyXG5pbXBvcnQgeyBNM1BEaW5hbWljYXMgfSBmcm9tIFwiLi4vUmVnaXN0cm8vbTMtcGRpbmFtaWNhc1wiO1xyXG5pbXBvcnQgeyBNM1BlclhQcm9jZXNvIH0gZnJvbSBcIi4uL1JlZ2lzdHJvL20zLXBlci14LXByb2Nlc29cIjtcclxuaW1wb3J0IHsgTTNVYmljYWNpb24gfSBmcm9tIFwiLi4vTWFlc3Ryby9VYmljYWNpb24vTTNVYmljYWNpb24udHlwZVwiO1xyXG5pbXBvcnQgeyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvIH0gZnJvbSBcIi4vbTMtbG9hZC1sLXByZWNpby5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvdWNoUFJEU1NlcnZpY2UgfSBmcm9tIFwiLi4vT2ZmbGluZS9jb3VjaC1wcmRzLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBNM1JlZ01hc2l2byB7XHJcblxyXG4gICAgcHJpdmF0ZSBnc0lkS2F0aW9zOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHJlYWRlcjogRmlsZVJlYWRlcjtcclxuICAgIHByaXZhdGUgc2VwYXJhZG9yOiBzdHJpbmcgPSBcIixcIjtcclxuICAgIHByaXZhdGUgb00zUHJvY2VzbyA9IG5ldyBNM1Byb2Nlc29zKCk7XHJcbiAgICBwcml2YXRlIHByb2dyZXNzOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIENvbmZNYXNpdmE6IGFueTtcclxuICAgIHB1YmxpYyByb3VuZGVkX3Byb2dyZXNzOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZ2JCYXJDb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihpc0lkS2F0aW9zOiBzdHJpbmcsIGlvTTNQcm9jZXNvOiBNM1Byb2Nlc29zLCBpQ29uZk1hc2l2YTogYW55LCBpYkJhcmNvZGU6IGJvb2xlYW4sXHJcbiAgICAgICAgcHJpdmF0ZSBvQ291Y2hQUkRTU2VydmljZTogQ291Y2hQUkRTU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMub00zUHJvY2VzbyA9IGlvTTNQcm9jZXNvO1xyXG4gICAgICAgIHRoaXMuZ3NJZEthdGlvcyA9IGlzSWRLYXRpb3M7XHJcbiAgICAgICAgdGhpcy5Db25mTWFzaXZhID0gaUNvbmZNYXNpdmE7XHJcbiAgICAgICAgdGhpcy5nYkJhckNvZGUgPSBpYkJhcmNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldF9yb3VuZGVkX3Byb2dyZXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJvdW5kZWRfcHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8vQWRpY2lvbmFyIHByb2R1Y3RvcyBlbiBtYXNpdm9cclxuICAgIHB1YmxpYyBhc3luYyBBZGljaW9uYXJNYXNpdm8ob00zQ291Y2hNYWVzdHJvOiBNM0NvdWNoTWFlc3RybywgUG9zdFNlcnZpY2VNMzogUG9zdFNlcnZpY2VNMywgb0RhdFVzZXI6IGFueSwgb0RhdGFQcm9jOiBhbnksIG9NM1ViaWNhY2lvbjogTTNVYmljYWNpb24gPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5HZXRSZWFkZXIob0RhdGFQcm9jKTtcclxuICAgICAgICBsZXQgY3N2OiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRlcikge1xyXG4gICAgICAgICAgICBjc3YgPSBvRGF0YVByb2MuVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNzdiA9IHRoaXMucmVhZGVyLnJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYXJyQ1NWOiBBcnJheTxzdHJpbmc+ID0gY3N2LnNwbGl0KFwiXFxuXCIpO1xyXG5cclxuICAgICAgICB2YXIgcHJvY2VzbzogW00zUHJvY2Vzb3MsIHN0cmluZ10gPSBhd2FpdCB0aGlzLmFkaWNpb25hcl9tYXNpdm9fZnJvbV9hcnJheShvTTNDb3VjaE1hZXN0cm8sIFBvc3RTZXJ2aWNlTTMsIG9EYXRVc2VyLCBhcnJDU1YsIG9NM1ViaWNhY2lvbik7XHJcblxyXG4gICAgICAgIHJldHVybiBwcm9jZXNvO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVjb3JyZSB5IGFkaWNpb25hIGxvcyBwcm9kdWN0b3MgZW4gdW4gYXJyYXkgYSB1biBwcm9jZXNvXHJcbiAgICAgKiBAcGFyYW0gb00zQ291Y2hNYWVzdHJvIFxyXG4gICAgICogQHBhcmFtIFBvc3RTZXJ2aWNlTTMgXHJcbiAgICAgKiBAcGFyYW0gb0RhdFVzZXIgXHJcbiAgICAgKiBAcGFyYW0gYXJyQ1NWIFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgYWRpY2lvbmFyX21hc2l2b19mcm9tX2FycmF5KG9NM0NvdWNoTWFlc3RybzogTTNDb3VjaE1hZXN0cm8sIFBvc3RTZXJ2aWNlTTM6IFBvc3RTZXJ2aWNlTTMsIG9EYXRVc2VyOiBhbnksIGFyckNTVjogQXJyYXk8c3RyaW5nPiwgb00zVWJpY2FjaW9uOiBNM1ViaWNhY2lvbiA9IG51bGwsIGFwbEV4Yzogc3RyaW5nID0gXCIwXCIpIHtcclxuXHJcbiAgICAgICAgbGV0IHRvdGFsID0gYXJyQ1NWLmxlbmd0aDtcclxuICAgICAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgICAgIHZhciBwcm9kdWN0OiBUeXBlTTNQcmRHcnBcclxuICAgICAgICB2YXIgb1NlcnZpY2VNM01hZXN0cm8gPSBuZXcgU2VydmljZU0zTWFlc3RybygpO1xyXG4gICAgICAgIHZhciBvTTNSZWdTZXJ2aWNlID0gbmV3IE0zUmVnU2VydmljZShvTTNDb3VjaE1hZXN0cm8sIFBvc3RTZXJ2aWNlTTMsIHRoaXMuZ3NJZEthdGlvcyk7XHJcbiAgICAgICAgdmFyIHByZHNGYWlsczogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgcHJkZmFpbGFjdHVhbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG4gICAgICAgIHZhciByZXN1bHQ6IGFueTtcclxuICAgICAgICBsZXQgYXJyYXlSZXNwOiBbTTNQcm9jZXNvcywgc3RyaW5nXSA9IFt0aGlzLm9NM1Byb2Nlc28sIFwiXCJdO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWw7IGkrKykge1xyXG4gICAgICAgICAgICBwcmRmYWlsYWN0dWFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZhciBsaW5lOiBzdHJpbmcgPSBhcnJDU1ZbaV07XHJcbiAgICAgICAgICAgIGlmIChsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1Y7XHJcbiAgICAgICAgICAgICAgICBvZXN0cnVjdENTViA9IHRoaXMuU2V0RXN0cnVjdENTVihsaW5lKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdiQmFyQ29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJmdWUgbG9jYWw6IFwiICsgb2VzdHJ1Y3RDU1Yuc2t1KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vQ291Y2hQUkRTU2VydmljZS5nZXQob2VzdHJ1Y3RDU1Yuc2t1KS50aGVuKGFzeW5jIHByZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwib2J0dXZvIGxvY2FsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhwcmQpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvU2VydmljZUxvYWRMaXN0YVByZWNpbyA9IG5ldyBTZXJ2aWNlTG9hZExpc3RhUHJlY2lvKHRoaXMuZ3NJZEthdGlvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBvU2VydmljZUxvYWRMaXN0YVByZWNpby5Bc2lnbmFyTGlzdGFQcmVjaW8ocHJkLkxpc3RDb2RzLCBvRGF0VXNlciwgUG9zdFNlcnZpY2VNMykudGhlbih4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwiYXNpZ25vIGxwIGxvY2FsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcocHJkLkxpc3RDb2RzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0ID0gcHJkLkxpc3RDb2RzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBhc3luYyBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgbHAgLSBpbnRlbnRvIHNlcnZlcjogXCIgKyBvZXN0cnVjdENTVi5za3UgKyBcIjogXCIgKyBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHsgXCJpZF91YmljYWNpb25cIjogb0RhdFVzZXIuVXN1YXJpb1Npc3RlbWEuVUJJQ0FDSU9OLCBcIkNvZGlnb1wiOiBvZXN0cnVjdENTVi5za3UgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCA9IGF3YWl0IG9TZXJ2aWNlTTNNYWVzdHJvLkdldF9NM1Byb2R1Y3RvRXNwZWNCeUNvZGVBc3luYyhQb3N0U2VydmljZU0zLCB0aGlzLmdzSWRLYXRpb3MsIGRhdGEsIG9EYXRVc2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvciBjYXRjaCBscDogXCIgKyBvZXN0cnVjdENTVi5za3UgKyBcIjogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJNc2c6IHN0cmluZyA9IGVyci51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZEZhaWwgPSBlcnJNc2cuc3Vic3RyaW5nKGVyck1zZy5pbmRleE9mKFwiQ29kaWdvXCIpICsgNyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJkc0ZhaWxzICs9IHByZEZhaWwgKyBcIixcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmRmYWlsYWN0dWFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKG9NM1ViaWNhY2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhvTTNVYmljYWNpb24gJiYgb00zVWJpY2FjaW9uLklEVWJpY2FjaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob00zVWJpY2FjaW9uICYmIG9NM1ViaWNhY2lvbi5JRFViaWNhY2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0ID0gYXdhaXQgb1NlcnZpY2VNM01hZXN0cm8uTTNHZXRQcm9kdWN0b0J5U0tVQXN5bmMoUG9zdFNlcnZpY2VNMywgdGhpcy5nc0lkS2F0aW9zLCBvZXN0cnVjdENTVi5za3UsIG9EYXRVc2VyLCBvTTNVYmljYWNpb24uSURVYmljYWNpb24sIGFwbEV4Yyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0ID0gYXdhaXQgb1NlcnZpY2VNM01hZXN0cm8uTTNHZXRQcm9kdWN0b0J5U0tVQXN5bmMoUG9zdFNlcnZpY2VNMywgdGhpcy5nc0lkS2F0aW9zLCBvZXN0cnVjdENTVi5za3UsIG9EYXRVc2VyLCBcIi0xXCIsIGFwbEV4Yyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcocHJvZHVjdCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByZGZhaWxhY3R1YWwgJiYgcHJvZHVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJlY2lvU2lBUGxpY2EocHJvZHVjdCwgb2VzdHJ1Y3RDU1YpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQWRkUHJkVG9NM1Byb2Nlc28ocHJvZHVjdCwgb2VzdHJ1Y3RDU1YsIG9NM1JlZ1NlcnZpY2UsIG9EYXRVc2VyLCBvTTNVYmljYWNpb24pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3IgcHJvZHVjdCBubyBzZSBsbGVubzogXCIgKyBvZXN0cnVjdENTVi5za3UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvdW50Kys7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSBjb3VudCAqIDEwMCAvIHRvdGFsO1xyXG4gICAgICAgICAgICB0aGlzLnJvdW5kZWRfcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKHRoaXMucHJvZ3Jlc3MgKiAxMDApIC8gMTAwXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFycmF5UmVzcFswXSA9IHRoaXMub00zUHJvY2VzbztcclxuICAgICAgICBhcnJheVJlc3BbMV0gPSBwcmRzRmFpbHM7XHJcbiAgICAgICAgcmV0dXJuIGFycmF5UmVzcDtcclxuICAgIH1cclxuXHJcbiAgICAvL0NhbWJpYXIgcHJlY2lvIGRlIHByb2R1Y3RvLlxyXG4gICAgcHVibGljIHNldFByZWNpb1NpQVBsaWNhKHByb2R1Y3Q6IFR5cGVNM1ByZEdycCwgb2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YpIHtcclxuICAgICAgICBpZiAob2VzdHJ1Y3RDU1YucHJlY2lvICE9PSBOYU4gJiYgb2VzdHJ1Y3RDU1YucHJlY2lvICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcHJvZHVjdC5Mb00zUHJkR2VuZXJhbFswXS5Mb00zUHJkTGlzdGEuUFJFQ0lPID0gb2VzdHJ1Y3RDU1YucHJlY2lvO1xyXG4gICAgICAgICAgICBwcm9kdWN0LkxvTTNQcmRHZW5lcmFsWzBdLkxvTTNQcmRMaXN0YS5NM1ByZXNlbnRhY2lvbmVzLmZvckVhY2gob00zUHJlc2VudGFjaW9uZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgb00zUHJlc2VudGFjaW9uZXMuVkFMT1IgPSBvZXN0cnVjdENTVi5wcmVjaW87XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL0FkaWNpb25hciBhIG0zcHJvY2VzbywgcHJvZHVjdG8gZXNwZWNpZmljbywgc2UgZW52aWEgY2FudGlkYWQuXHJcbiAgICBwdWJsaWMgQWRkUHJkVG9NM1Byb2Nlc28ocHJvZHVjdDogVHlwZU0zUHJkR3JwLCBvZXN0cnVjdENTVjogZXN0cnVjdENTViwgb00zUmVnU2VydmljZTogTTNSZWdTZXJ2aWNlLCBvRGF0VXNlcjogYW55LCBvTTNVYmljYWNpb246IE0zVWJpY2FjaW9uID0gbnVsbCkge1xyXG4gICAgICAgIHZhciBvTTNQSXRlbXNXRUIgPSBuZXcgTTNQSXRlbXNXRUIoKTtcclxuICAgICAgICBvTTNQSXRlbXNXRUIuZENhbnRpZGFkID0gb2VzdHJ1Y3RDU1YuY2FudGlkYWQ7XHJcbiAgICAgICAgaWYgKG9lc3RydWN0Q1NWLlBhdGhJbWFnZW4pIHtcclxuICAgICAgICAgICAgb00zUEl0ZW1zV0VCLlBhdGhJbWFnZW4gPSBvZXN0cnVjdENTVi5QYXRoSW1hZ2VuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvTTNQSXRlbXNXRUIgPSBvTTNSZWdTZXJ2aWNlLkxvYWRBZGljaW9uYWxlcyhvTTNQSXRlbXNXRUIsIHByb2R1Y3QpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vTTNQcm9jZXNvLk0zRU5DLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vL1ByaW1lcmEgdmV6IFxyXG4gICAgICAgICAgICAvLy9OTyBTRSBFU1RBIEVOVklBTkRPIElORk9STUFDSU9OIERFIFBST01PQ0lPTkVTXHJcbiAgICAgICAgICAgIHRoaXMub00zUHJvY2VzbyA9IG9NM1JlZ1NlcnZpY2UuTG9hZE0zUHJvY2Vzb0VtcHR5UERCKHByb2R1Y3QsIG9NM1BJdGVtc1dFQiwgb0RhdFVzZXIsIG9NM1ViaWNhY2lvbiwgbnVsbCwgdGhpcy5vTTNQcm9jZXNvKTtcclxuICAgICAgICAgICAgLy9BZ3JlZ2FyIGRpbmFtaWNhc1xyXG4gICAgICAgICAgICB0aGlzLkFkaWNpb25hckRpbmFtaWNhKG9lc3RydWN0Q1NWKTtcclxuICAgICAgICAgICAgdGhpcy5BZGljaW9uYXJQZXJzb25hc0FQcm9jZXNvKG9lc3RydWN0Q1NWKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb00zUmVnU2VydmljZS5Mb2FkTTNQcm9jZXNvRnJvbURhdGEodGhpcy5vTTNQcm9jZXNvLCBwcm9kdWN0LCBvTTNQSXRlbXNXRUIsIG9NM1ViaWNhY2lvbiwgbnVsbCwgb0RhdFVzZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLkFkaWNpb25hckRldGFsbGUob2VzdHJ1Y3RDU1YpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIGNhcHR1cmFzIGRpbmFtaWNhc1xyXG4gICAgICogQHBhcmFtIG9lc3RydWN0Q1NWIEVzdHJ1Y3R1cmEgY29uIGluZm9ybWFjaW9uIGRlIGxpbmVhIGEgYWdyZWdhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQWRpY2lvbmFyRGluYW1pY2Eob2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgZGluYW1pY2FzID0gb2VzdHJ1Y3RDU1YuRGluYW1pY2FzXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGluYW1pY2FzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb00zUERpbmFtaWNhcyA9IG5ldyBNM1BEaW5hbWljYXMoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vTTNQcm9jZXNvLmxNM1BEaW5hbWljYXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28ubE0zUERpbmFtaWNhcyA9IG5ldyBBcnJheTxNM1BEaW5hbWljYXM+KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvTTNQRGluYW1pY2FzLk5vbWJyZSA9IGRpbmFtaWNhc1tpXS5BdHJpYnV0bztcclxuICAgICAgICAgICAgICAgIG9NM1BEaW5hbWljYXMuVmFsb3IgPSBkaW5hbWljYXNbaV0uVmFsb3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9NM1Byb2Nlc28ubE0zUERpbmFtaWNhcy5wdXNoKG9NM1BEaW5hbWljYXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciBhZGljaW9uYXIgZGluYW1pY2FcIilcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIHBlcnNvbmFzIGEgcHJvY2Vzb1xyXG4gICAgICogQHBhcmFtIG9lc3RydWN0Q1NWIEVzdHJ1Y3R1cmEgY29uIGluZm9ybWFjaW9uIGEgYWdyZWdhclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgQWRpY2lvbmFyUGVyc29uYXNBUHJvY2VzbyhvZXN0cnVjdENTVjogZXN0cnVjdENTVikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciBwZXJzb25hcyA9IG9lc3RydWN0Q1NWLlBlcnNvbmFzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBlcnNvbmFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb00zUGVyWFByb2Nlc28gPSBuZXcgTTNQZXJYUHJvY2VzbygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9NM1Byb2Nlc28uTTNQZXJYUHJvY2Vzbykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5NM1BlclhQcm9jZXNvID0gbmV3IEFycmF5PE0zUGVyWFByb2Nlc28+KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvTTNQZXJYUHJvY2Vzby5UZG9jID0gcGVyc29uYXNbaV0uVGRvYztcclxuICAgICAgICAgICAgICAgIG9NM1BlclhQcm9jZXNvLk5kb2MgPSBwZXJzb25hc1tpXS5OZG9jO1xyXG4gICAgICAgICAgICAgICAgb00zUGVyWFByb2Nlc28uVGlwb1BlcnNvbmEgPSBwZXJzb25hc1tpXS5BdHJpYnV0bztcclxuICAgICAgICAgICAgICAgIHRoaXMub00zUHJvY2Vzby5NM1BlclhQcm9jZXNvLnB1c2gob00zUGVyWFByb2Nlc28pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciBhZGljaW9uYXIgcGVyc29uYXNcIilcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXgpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRpY2lvbmFyIGRldGFsbGUgYWwgdWx0aW1vIGVuY2FiZXphZG8gYWdyZWdhZG8uXHJcbiAgICAgKiBAcGFyYW0gb2VzdHJ1Y3RDU1YgRXN0cnVjdHVyYSBjb24gaW5mb3JtYWNpb24gZGUgbGluZWEgYSBhZ3JlZ2FyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBBZGljaW9uYXJEZXRhbGxlKG9lc3RydWN0Q1NWOiBlc3RydWN0Q1NWKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIGRldGFsbGVzID0gb2VzdHJ1Y3RDU1YuTTNEZXRcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXRhbGxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9NM1BEZXRhbGxlSXRlbXMgPSBuZXcgTTNQRGV0YWxsZUl0ZW1zKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgb00zUERldGFsbGVJdGVtcy5Ob21icmVDb25jZXB0byA9IGRldGFsbGVzW2ldLkF0cmlidXRvO1xyXG4gICAgICAgICAgICAgICAgb00zUERldGFsbGVJdGVtcy5WYWxvciA9IGRldGFsbGVzW2ldLlZhbG9yO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vTTNQcm9jZXNvLk0zRU5DW3RoaXMub00zUHJvY2Vzby5NM0VOQy5sZW5ndGggLSAxXS5NM0RFVC5wdXNoKG9NM1BEZXRhbGxlSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLm9NM1Byb2Nlc28uTTNFTkMuZmluZCh4ID0+IHguSWRQcm9kdWN0byA9PSBvZXN0cnVjdENTVi4pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGFkaWNpb25hciBkZXRhbGxlXCIpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV4KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vT2J0ZW5lciB5IHNldGVhciBsYSBpbmZvcm1hY2lvbiBkZSBhcmNoaXZvIENTViB5IHNlcGFyYWRvci5cclxuICAgIHB1YmxpYyBHZXRSZWFkZXIob0RhdGFQcm9jOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJlYWRlciA9IG9EYXRhUHJvYy5DU1Y7XHJcbiAgICAgICAgdGhpcy5zZXBhcmFkb3IgPSBvRGF0YVByb2MuU2VwYXJhZG9yO1xyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8vU2V0ZWFyIGVzdHJ1Y3V0YXIgZGUgQ1NWXHJcbiAgICBwdWJsaWMgU2V0RXN0cnVjdENTVihsaW5lOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2YXIgb2VzdHJ1Y3RDU1Y6IGVzdHJ1Y3RDU1YgPSB7IFwiY2FudGlkYWRcIjogbnVsbCwgXCJwcmVjaW9cIjogbnVsbCwgXCJza3VcIjogbnVsbCwgXCJQYXRoSW1hZ2VuXCI6IG51bGwsIFwiRGluYW1pY2FzXCI6IFtdLCBcIlBlcnNvbmFzXCI6IFtdLCBcIk0zRGV0XCI6IFtdIH07XHJcbiAgICAgICAgICAgIHZhciBvQXJyQ1NWOiBBcnJheTxzdHJpbmc+ID0gbGluZS5zcGxpdCh0aGlzLnNlcGFyYWRvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5Db25mTWFzaXZhICYmIHRoaXMuQ29uZk1hc2l2YS5Db2x1bW5hcykge1xyXG4gICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YgPSB0aGlzLkVzdHJ1Y3REeW5hbWljKG9BcnJDU1YpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YgPSB0aGlzLkVzdHJ1Y3REZWZhdWx0KG9BcnJDU1YpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb2VzdHJ1Y3RDU1Y7XHJcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFcnJvciBjcmVhbmRvIGVzdHJ1Y3R1cmEuIFJldmlzYXIgbGluZWFzXCIpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzdHJ1Y3R1cmEgZGluYW1pY2EgZGUgY2FyZ3VlIG1hc2l2YVxyXG4gICAgICogQHBhcmFtIG9BcnJDU1YgYXJyZWdsbyBjb24gaW5mb3JtYWNpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBFc3RydWN0RHluYW1pYyhvQXJyQ1NWOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdmFyIGNvbHVtbmFzOiBBcnJheTxhbnk+ID0gdGhpcy5Db25mTWFzaXZhLkNvbHVtbmFzO1xyXG4gICAgICAgIHZhciBvZXN0cnVjdENTVjogZXN0cnVjdENTViA9IHsgXCJjYW50aWRhZFwiOiBudWxsLCBcInByZWNpb1wiOiBudWxsLCBcInNrdVwiOiBudWxsLCBcIlBhdGhJbWFnZW5cIjogbnVsbCwgXCJEaW5hbWljYXNcIjogW10sIFwiUGVyc29uYXNcIjogW10sIFwiTTNEZXRcIjogW10gfTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5hcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbHVtbmFzW2ldLkVzdHJ1Y3R1cmEpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJDYW50aWRhZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLmNhbnRpZGFkID0gK29BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlByZWNpb1wiOlxyXG4gICAgICAgICAgICAgICAgICAgIG9lc3RydWN0Q1NWLnByZWNpbyA9ICtvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJTS1VcIjpcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5za3UgPSBvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJESU5BTUlDQVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaW4gPSB7IFwiQXRyaWJ1dG9cIjogY29sdW1uYXNbaV0uQXRyaWJ1dG8sIFwiVmFsb3JcIjogb0FyckNTVltjb2x1bW5hc1tpXS5Qb3NpY2lvbl0gfTtcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5EaW5hbWljYXMucHVzaChkaW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIk0zREVUXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG0zRGV0ID0geyBcIkF0cmlidXRvXCI6IGNvbHVtbmFzW2ldLkF0cmlidXRvLCBcIlZhbG9yXCI6IG9BcnJDU1ZbY29sdW1uYXNbaV0uUG9zaWNpb25dIH07XHJcbiAgICAgICAgICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuTTNEZXQucHVzaChtM0RldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiVElQT1BFUlNPTkFcIjpcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsb3IgPSBvQXJyQ1NWW2NvbHVtbmFzW2ldLlBvc2ljaW9uXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGRvYzogc3RyaW5nID0gXCI1XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5kb2M6IHN0cmluZztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbG9yLnNwbGl0KFwiLVwiKS5sZW5ndGggPj0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZG9jID0gdmFsb3Iuc3BsaXQoXCItXCIpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZG9jID0gdmFsb3Iuc3BsaXQoXCItXCIpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5kb2MgPSB2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwZXJzb25hID0geyBcIkF0cmlidXRvXCI6IGNvbHVtbmFzW2ldLkF0cmlidXRvLCBcIlRkb2NcIjogdGRvYywgXCJOZG9jXCI6IG5kb2MgfTtcclxuICAgICAgICAgICAgICAgICAgICBvZXN0cnVjdENTVi5QZXJzb25hcy5wdXNoKHBlcnNvbmEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2VzdHJ1Y3RDU1Y7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3RydWN0dXJhIGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0gb0FyckNTViBBcnJlZ2xvIGNvbiBpbmZvcm1hY2lvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgRXN0cnVjdERlZmF1bHQob0FyckNTVjogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgICAgIHZhciBvZXN0cnVjdENTVjogZXN0cnVjdENTViA9IHsgXCJjYW50aWRhZFwiOiBudWxsLCBcInByZWNpb1wiOiBudWxsLCBcInNrdVwiOiBudWxsLCBcIlBhdGhJbWFnZW5cIjogbnVsbCwgXCJEaW5hbWljYXNcIjogW10sIFwiUGVyc29uYXNcIjogW10sIFwiTTNEZXRcIjogW10gfTtcclxuICAgICAgICAvL3ZhciBvQXJyQ1NWOiBBcnJheTxzdHJpbmc+ID0gbGluZS5zcGxpdCh0aGlzLnNlcGFyYWRvcik7XHJcblxyXG4gICAgICAgIGlmIChvQXJyQ1NWLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIG9lc3RydWN0Q1NWLnNrdSA9IG9BcnJDU1ZbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvQXJyQ1NWLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgICAgIG9lc3RydWN0Q1NWLmNhbnRpZGFkID0gK29BcnJDU1ZbMV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob0FyckNTVi5sZW5ndGggPj0gMykge1xyXG4gICAgICAgICAgICBvZXN0cnVjdENTVi5wcmVjaW8gPSArb0FyckNTVlsyXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG9BcnJDU1YubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgb2VzdHJ1Y3RDU1YuUGF0aEltYWdlbiA9IG9BcnJDU1ZbM107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZXN0cnVjdENTVjtcclxuICAgIH1cclxuXHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBlc3RydWN0Q1NWIHtcclxuICAgIHNrdTogc3RyaW5nO1xyXG4gICAgY2FudGlkYWQ6IG51bWJlcjtcclxuICAgIHByZWNpbzogbnVtYmVyO1xyXG4gICAgUGF0aEltYWdlbjogc3RyaW5nO1xyXG4gICAgRGluYW1pY2FzOiBBcnJheTxhbnk+O1xyXG4gICAgUGVyc29uYXM6IEFycmF5PGFueT47XHJcbiAgICBNM0RldDogQXJyYXk8YW55PjtcclxufSJdfQ==