valtech-components 2.0.505 → 2.0.506

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.
@@ -4,4 +4,4 @@
4
4
  * Tipos e interfaces para el servicio de Firebase Analytics (GA4).
5
5
  */
6
6
  export {};
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9hbmFseXRpY3MtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5hbHl0aWNzIFR5cGVzXG4gKlxuICogVGlwb3MgZSBpbnRlcmZhY2VzIHBhcmEgZWwgc2VydmljaW8gZGUgRmlyZWJhc2UgQW5hbHl0aWNzIChHQTQpLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJR1VSQUNJw5NOXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gZGUgQW5hbHl0aWNzIHBhcmEgVmFsdGVjaEZpcmViYXNlQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzQ29uZmlnIHtcbiAgLyoqIEhhYmlsaXRhciB0cmFja2luZyBhdXRvbcOhdGljbyBkZSBwYWdlIHZpZXdzIHZpYSBSb3V0ZXIgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZVBhZ2VWaWV3VHJhY2tpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBIYWJpbGl0YXIgdHJhY2tpbmcgYXV0b23DoXRpY28gZGUgZXJyb3JlcyB2aWEgRXJyb3JIYW5kbGVyIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgZW5hYmxlRXJyb3JUcmFja2luZz86IGJvb2xlYW47XG5cbiAgLyoqIEhhYmlsaXRhciBpbnRlZ3JhY2nDs24gY29uIGF1dGggcGFyYSB1c2VySWQgeSB1c2VyUHJvcGVydGllcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlQXV0aEludGVncmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogTW9kbyBkZWJ1Zzogbm8gZW52w61hIGEgRmlyZWJhc2UsIGxvZ2VhIGEgY29uc29sYSAoZGVmYXVsdDogZmFsc2UgZW4gcHJvZCkgKi9cbiAgZGVidWdNb2RlPzogYm9vbGVhbjtcblxuICAvKiogUnV0YXMgYSBleGNsdWlyIGRlbCBwYWdlIHZpZXcgdHJhY2tpbmcgKHJlZ2V4IHBhdHRlcm5zKSAqL1xuICBleGNsdWRlUm91dGVzPzogc3RyaW5nW107XG5cbiAgLyoqIENvbnNlbnQgbW9kZSBpbmljaWFsIChHRFBSKSAqL1xuICBkZWZhdWx0Q29uc2VudD86IENvbnNlbnRTZXR0aW5ncztcblxuICAvKiogQ2xhdmUgZGUgbG9jYWxTdG9yYWdlIHBhcmEgcGVyc2lzdGlyIGNvbnNlbnQgKGRlZmF1bHQ6ICdhbmFseXRpY3NfY29uc2VudCcpICovXG4gIGNvbnNlbnRTdG9yYWdlS2V5Pzogc3RyaW5nO1xuXG4gIC8qKiBQcm9waWVkYWRlcyBkZSB1c3VhcmlvIHBvciBkZWZlY3RvICovXG4gIGRlZmF1bHRVc2VyUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIFByZWZpam8gcGFyYSBldmVudG9zIGN1c3RvbSAoZWo6ICdteWFwcF8nKSAqL1xuICBldmVudFByZWZpeD86IHN0cmluZztcblxuICAvKiogU2FtcGxpbmcgcmF0ZSAoMC4wIC0gMS4wKSBwYXJhIHJlZHVjaXIgdm9sdW1lbiAoZGVmYXVsdDogMS4wKSAqL1xuICBzYW1wbGluZ1JhdGU/OiBudW1iZXI7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTlNFTlQgKEdEUFIpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2V0dGluZ3MgZGUgY29uc2VudGltaWVudG8gR0RQUlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRTZXR0aW5ncyB7XG4gIC8qKiBQZXJtaXRlIHJlY29sZWNjacOzbiBkZSBhbmFseXRpY3MgKi9cbiAgYW5hbHl0aWNzPzogYm9vbGVhbjtcbiAgLyoqIFBlcm1pdGUgcGVyc29uYWxpemFjacOzbiBkZSBhZHMgKi9cbiAgYWR2ZXJ0aXNpbmc/OiBib29sZWFuO1xuICAvKiogUGVybWl0ZSBmdW5jaW9uYWxpZGFkICovXG4gIGZ1bmN0aW9uYWxpdHk/OiBib29sZWFuO1xuICAvKiogUGVybWl0ZSBzZWd1cmlkYWQgKi9cbiAgc2VjdXJpdHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVzdGFkbyBjb21wbGV0byBkZSBjb25zZW50aW1pZW50b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRTdGF0ZSB7XG4gIC8qKiBTZXR0aW5ncyBhY3R1YWxlcyAqL1xuICBzZXR0aW5nczogQ29uc2VudFNldHRpbmdzO1xuICAvKiogVGltZXN0YW1wIGRlIGxhIMO6bHRpbWEgYWN0dWFsaXphY2nDs24gKi9cbiAgdXBkYXRlZEF0OiBEYXRlIHwgbnVsbDtcbiAgLyoqIFNpIGVsIHVzdWFyaW8gaGEgdG9tYWRvIHVuYSBkZWNpc2nDs24gZXhwbMOtY2l0YSAqL1xuICBoYXNEZWNpZGVkOiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFVkVOVE9TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogTm9tYnJlcyBkZSBldmVudG9zIEdBNCByZWNvbWVuZGFkb3MgKyBjdXN0b21zXG4gKi9cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0V2ZW50TmFtZSA9XG4gIC8vIEdBNCBSZWNvbW1lbmRlZCBFdmVudHMgLSBFY29tbWVyY2VcbiAgfCAnYWRkX3BheW1lbnRfaW5mbydcbiAgfCAnYWRkX3NoaXBwaW5nX2luZm8nXG4gIHwgJ2FkZF90b19jYXJ0J1xuICB8ICdhZGRfdG9fd2lzaGxpc3QnXG4gIHwgJ2JlZ2luX2NoZWNrb3V0J1xuICB8ICdwdXJjaGFzZSdcbiAgfCAncmVmdW5kJ1xuICB8ICdyZW1vdmVfZnJvbV9jYXJ0J1xuICB8ICd2aWV3X2NhcnQnXG4gIHwgJ3ZpZXdfaXRlbSdcbiAgfCAndmlld19pdGVtX2xpc3QnXG4gIC8vIEdBNCBSZWNvbW1lbmRlZCBFdmVudHMgLSBFbmdhZ2VtZW50XG4gIHwgJ2dlbmVyYXRlX2xlYWQnXG4gIHwgJ2xvZ2luJ1xuICB8ICdwYWdlX3ZpZXcnXG4gIHwgJ3NjcmVlbl92aWV3J1xuICB8ICdzZWFyY2gnXG4gIHwgJ3NlbGVjdF9jb250ZW50J1xuICB8ICdzZWxlY3RfaXRlbSdcbiAgfCAnc2VsZWN0X3Byb21vdGlvbidcbiAgfCAnc2hhcmUnXG4gIHwgJ3NpZ25fdXAnXG4gIHwgJ3ZpZXdfcHJvbW90aW9uJ1xuICAvLyBDdXN0b20gRXZlbnRzIChhcHAtc3BlY2lmaWMpXG4gIHwgJ2ZlYXR1cmVfdXNlZCdcbiAgfCAncHJlZmVyZW5jZV9jaGFuZ2VkJ1xuICB8ICdvbmJvYXJkaW5nX3N0ZXAnXG4gIHwgJ2Vycm9yX29jY3VycmVkJ1xuICB8ICdwZXJmb3JtYW5jZV9tZXRyaWMnXG4gIC8vIEFsbG93IGN1c3RvbSBldmVudHNcbiAgfCBzdHJpbmc7XG5cbi8qKlxuICogUGFyw6FtZXRyb3MgdGlwYWRvcyBwb3IgZXZlbnRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzRXZlbnRQYXJhbXMge1xuICAvLyBFY29tbWVyY2VcbiAgYWRkX3RvX2NhcnQ6IHtcbiAgICBpdGVtX2lkOiBzdHJpbmc7XG4gICAgaXRlbV9uYW1lPzogc3RyaW5nO1xuICAgIHZhbHVlPzogbnVtYmVyO1xuICAgIGN1cnJlbmN5Pzogc3RyaW5nO1xuICAgIHF1YW50aXR5PzogbnVtYmVyO1xuICB9O1xuICBwdXJjaGFzZToge1xuICAgIHRyYW5zYWN0aW9uX2lkOiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBjdXJyZW5jeT86IHN0cmluZztcbiAgICBpdGVtcz86IEFuYWx5dGljc0l0ZW1bXTtcbiAgICB0YXg/OiBudW1iZXI7XG4gICAgc2hpcHBpbmc/OiBudW1iZXI7XG4gIH07XG4gIGJlZ2luX2NoZWNrb3V0OiB7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgaXRlbXM/OiBBbmFseXRpY3NJdGVtW107XG4gIH07XG4gIHZpZXdfaXRlbToge1xuICAgIGl0ZW1faWQ6IHN0cmluZztcbiAgICBpdGVtX25hbWU/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIH07XG4gIHJlbW92ZV9mcm9tX2NhcnQ6IHtcbiAgICBpdGVtX2lkOiBzdHJpbmc7XG4gICAgaXRlbV9uYW1lPzogc3RyaW5nO1xuICAgIHZhbHVlPzogbnVtYmVyO1xuICB9O1xuXG4gIC8vIEVuZ2FnZW1lbnRcbiAgbG9naW46IHsgbWV0aG9kPzogc3RyaW5nIH07XG4gIHNpZ25fdXA6IHsgbWV0aG9kPzogc3RyaW5nIH07XG4gIHNlYXJjaDogeyBzZWFyY2hfdGVybTogc3RyaW5nIH07XG4gIHNoYXJlOiB7IGNvbnRlbnRfdHlwZT86IHN0cmluZzsgaXRlbV9pZD86IHN0cmluZzsgbWV0aG9kPzogc3RyaW5nIH07XG4gIHNlbGVjdF9jb250ZW50OiB7IGNvbnRlbnRfdHlwZTogc3RyaW5nOyBpdGVtX2lkPzogc3RyaW5nIH07XG4gIHBhZ2VfdmlldzogeyBwYWdlX3BhdGg/OiBzdHJpbmc7IHBhZ2VfdGl0bGU/OiBzdHJpbmc7IHBhZ2VfbG9jYXRpb24/OiBzdHJpbmcgfTtcbiAgc2NyZWVuX3ZpZXc6IHsgc2NyZWVuX25hbWU6IHN0cmluZzsgc2NyZWVuX2NsYXNzPzogc3RyaW5nIH07XG5cbiAgLy8gQ3VzdG9tXG4gIGZlYXR1cmVfdXNlZDogeyBmZWF0dXJlX25hbWU6IHN0cmluZzsgZmVhdHVyZV9jYXRlZ29yeT86IHN0cmluZyB9O1xuICBwcmVmZXJlbmNlX2NoYW5nZWQ6IHsgcHJlZmVyZW5jZV9uYW1lOiBzdHJpbmc7IG9sZF92YWx1ZT86IHN0cmluZzsgbmV3X3ZhbHVlPzogc3RyaW5nIH07XG4gIG9uYm9hcmRpbmdfc3RlcDogeyBzdGVwX251bWJlcjogbnVtYmVyOyBzdGVwX25hbWU/OiBzdHJpbmcgfTtcbiAgZXJyb3Jfb2NjdXJyZWQ6IHtcbiAgICBlcnJvcl90eXBlOiBzdHJpbmc7XG4gICAgZXJyb3JfbWVzc2FnZT86IHN0cmluZztcbiAgICBlcnJvcl9zdGFjaz86IHN0cmluZztcbiAgICBjb250ZXh0Pzogc3RyaW5nO1xuICB9O1xuICBwZXJmb3JtYW5jZV9tZXRyaWM6IHsgbWV0cmljX25hbWU6IHN0cmluZzsgdmFsdWU6IG51bWJlcjsgdW5pdD86IHN0cmluZyB9O1xuXG4gIC8vIEFsbG93IGN1c3RvbSBwYXJhbXNcbiAgW2tleTogc3RyaW5nXTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSXRlbSBwYXJhIGV2ZW50b3MgZGUgZWNvbW1lcmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzSXRlbSB7XG4gIC8qKiBJRCDDum5pY28gZGVsIGl0ZW0gKi9cbiAgaXRlbV9pZDogc3RyaW5nO1xuICAvKiogTm9tYnJlIGRlbCBpdGVtICovXG4gIGl0ZW1fbmFtZTogc3RyaW5nO1xuICAvKiogQ2F0ZWdvcsOtYSBwcmluY2lwYWwgKi9cbiAgaXRlbV9jYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIFN1YmNhdGVnb3LDrWFzICovXG4gIGl0ZW1fY2F0ZWdvcnkyPzogc3RyaW5nO1xuICBpdGVtX2NhdGVnb3J5Mz86IHN0cmluZztcbiAgLyoqIE1hcmNhICovXG4gIGl0ZW1fYnJhbmQ/OiBzdHJpbmc7XG4gIC8qKiBWYXJpYW50ZSAoZWo6IGNvbG9yLCB0YWxsYSkgKi9cbiAgaXRlbV92YXJpYW50Pzogc3RyaW5nO1xuICAvKiogUHJlY2lvIHVuaXRhcmlvICovXG4gIHByaWNlPzogbnVtYmVyO1xuICAvKiogQ2FudGlkYWQgKi9cbiAgcXVhbnRpdHk/OiBudW1iZXI7XG4gIC8qKiBNb25lZGEgSVNPIDQyMTcgKi9cbiAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIC8qKiBQb3NpY2nDs24gZW4gbGlzdGEgKi9cbiAgaW5kZXg/OiBudW1iZXI7XG4gIC8qKiBDdXDDs24gYXBsaWNhZG8gKi9cbiAgY291cG9uPzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBERUJVR1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRpcG8gZGUgZXZlbnRvIGRlIGRlYnVnXG4gKi9cbmV4cG9ydCB0eXBlIERlYnVnRXZlbnRUeXBlID1cbiAgfCAnZXZlbnQnXG4gIHwgJ3BhZ2VfdmlldydcbiAgfCAnc2NyZWVuX3ZpZXcnXG4gIHwgJ3VzZXJfcHJvcGVydHknXG4gIHwgJ2Vycm9yJ1xuICB8ICdjb25zZW50J1xuICB8ICd0aW1pbmcnO1xuXG4vKipcbiAqIEV2ZW50byBkZSBkZWJ1ZyAoc29sbyBlbiBkZWJ1ZyBtb2RlKVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuYWx5dGljc0RlYnVnRXZlbnQge1xuICAvKiogVGltZXN0YW1wIGRlbCBldmVudG8gKi9cbiAgdGltZXN0YW1wOiBEYXRlO1xuICAvKiogVGlwbyBkZSBldmVudG8gKi9cbiAgdHlwZTogRGVidWdFdmVudFR5cGU7XG4gIC8qKiBOb21icmUgZGVsIGV2ZW50byAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXLDoW1ldHJvcyBkZWwgZXZlbnRvICovXG4gIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU2kgZnVlIGVudmlhZG8gYSBGaXJlYmFzZSAoZmFsc2UgZW4gZGVidWcgbW9kZSkgKi9cbiAgc2VudDogYm9vbGVhbjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVElNSU5HIC8gUEVSRk9STUFOQ0Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBNw6l0cmljYSBkZSB0aW1pbmcvcGVyZm9ybWFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1pbmdNZXRyaWMge1xuICAvKiogTm9tYnJlIGRlIGxhIG3DqXRyaWNhICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFZhbG9yIGVuIG1pbGlzZWd1bmRvcyAqL1xuICB2YWx1ZU1zOiBudW1iZXI7XG4gIC8qKiBDYXRlZ29yw61hIChlajogJ2FwaScsICdyZW5kZXInLCAnbG9hZCcpICovXG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogUGFyw6FtZXRyb3MgYWRpY2lvbmFsZXMgKi9cbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVVNFUlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFByb3BpZWRhZGVzIGRlIHVzdWFyaW8gcGFyYSBzZWdtZW50YWNpw7NuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclByb3BlcnRpZXMge1xuICAvKiogSWRpb21hIHByZWZlcmlkbyAqL1xuICBwcmVmZXJyZWRfbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIC8qKiBOaXZlbCBkZSBzdXNjcmlwY2nDs24gKi9cbiAgc3Vic2NyaXB0aW9uX3RpZXI/OiBzdHJpbmc7XG4gIC8qKiBPcmdhbml6YWNpw7NuIGFjdGl2YSAobXVsdGktdGVuYW50KSAqL1xuICBhY3RpdmVfb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuICAvKiogUHJvcGllZGFkZXMgY3VzdG9tICovXG4gIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG4iXX0=
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9maXJlYmFzZS9hbmFseXRpY3MtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5hbHl0aWNzIFR5cGVzXG4gKlxuICogVGlwb3MgZSBpbnRlcmZhY2VzIHBhcmEgZWwgc2VydmljaW8gZGUgRmlyZWJhc2UgQW5hbHl0aWNzIChHQTQpLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENPTkZJR1VSQUNJw5NOXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ29uZmlndXJhY2nDs24gZGUgQW5hbHl0aWNzIHBhcmEgVmFsdGVjaEZpcmViYXNlQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzQ29uZmlnIHtcbiAgLyoqIEhhYmlsaXRhciB0cmFja2luZyBhdXRvbcOhdGljbyBkZSBwYWdlIHZpZXdzIHZpYSBSb3V0ZXIgKGRlZmF1bHQ6IHRydWUpICovXG4gIGVuYWJsZVBhZ2VWaWV3VHJhY2tpbmc/OiBib29sZWFuO1xuXG4gIC8qKiBIYWJpbGl0YXIgdHJhY2tpbmcgYXV0b23DoXRpY28gZGUgZXJyb3JlcyB2aWEgRXJyb3JIYW5kbGVyIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgZW5hYmxlRXJyb3JUcmFja2luZz86IGJvb2xlYW47XG5cbiAgLyoqIEhhYmlsaXRhciBpbnRlZ3JhY2nDs24gY29uIGF1dGggcGFyYSB1c2VySWQgeSB1c2VyUHJvcGVydGllcyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgZW5hYmxlQXV0aEludGVncmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogTW9kbyBkZWJ1ZzogbG9nZWEgYSBjb25zb2xhIGFkZW3DoXMgZGUgZW52aWFyIGEgRmlyZWJhc2UgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBkZWJ1Z01vZGU/OiBib29sZWFuO1xuXG4gIC8qKiBBdXRvLWdyYW50IGNvbnNlbnQgcGFyYSBkZXNhcnJvbGxvL3Rlc3RpbmcgKGRlZmF1bHQ6IGZhbHNlKSAqL1xuICBkZWZhdWx0Q29uc2VudEdyYW50ZWQ/OiBib29sZWFuO1xuXG4gIC8qKiBSdXRhcyBhIGV4Y2x1aXIgZGVsIHBhZ2UgdmlldyB0cmFja2luZyAocmVnZXggcGF0dGVybnMpICovXG4gIGV4Y2x1ZGVSb3V0ZXM/OiBzdHJpbmdbXTtcblxuICAvKiogQ29uc2VudCBtb2RlIGluaWNpYWwgKEdEUFIpICovXG4gIGRlZmF1bHRDb25zZW50PzogQ29uc2VudFNldHRpbmdzO1xuXG4gIC8qKiBDbGF2ZSBkZSBsb2NhbFN0b3JhZ2UgcGFyYSBwZXJzaXN0aXIgY29uc2VudCAoZGVmYXVsdDogJ2FuYWx5dGljc19jb25zZW50JykgKi9cbiAgY29uc2VudFN0b3JhZ2VLZXk/OiBzdHJpbmc7XG5cbiAgLyoqIFByb3BpZWRhZGVzIGRlIHVzdWFyaW8gcG9yIGRlZmVjdG8gKi9cbiAgZGVmYXVsdFVzZXJQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKiogUHJlZmlqbyBwYXJhIGV2ZW50b3MgY3VzdG9tIChlajogJ215YXBwXycpICovXG4gIGV2ZW50UHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKiBTYW1wbGluZyByYXRlICgwLjAgLSAxLjApIHBhcmEgcmVkdWNpciB2b2x1bWVuIChkZWZhdWx0OiAxLjApICovXG4gIHNhbXBsaW5nUmF0ZT86IG51bWJlcjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09OU0VOVCAoR0RQUilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBTZXR0aW5ncyBkZSBjb25zZW50aW1pZW50byBHRFBSXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFNldHRpbmdzIHtcbiAgLyoqIFBlcm1pdGUgcmVjb2xlY2Npw7NuIGRlIGFuYWx5dGljcyAqL1xuICBhbmFseXRpY3M/OiBib29sZWFuO1xuICAvKiogUGVybWl0ZSBwZXJzb25hbGl6YWNpw7NuIGRlIGFkcyAqL1xuICBhZHZlcnRpc2luZz86IGJvb2xlYW47XG4gIC8qKiBQZXJtaXRlIGZ1bmNpb25hbGlkYWQgKi9cbiAgZnVuY3Rpb25hbGl0eT86IGJvb2xlYW47XG4gIC8qKiBQZXJtaXRlIHNlZ3VyaWRhZCAqL1xuICBzZWN1cml0eT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXN0YWRvIGNvbXBsZXRvIGRlIGNvbnNlbnRpbWllbnRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFN0YXRlIHtcbiAgLyoqIFNldHRpbmdzIGFjdHVhbGVzICovXG4gIHNldHRpbmdzOiBDb25zZW50U2V0dGluZ3M7XG4gIC8qKiBUaW1lc3RhbXAgZGUgbGEgw7psdGltYSBhY3R1YWxpemFjacOzbiAqL1xuICB1cGRhdGVkQXQ6IERhdGUgfCBudWxsO1xuICAvKiogU2kgZWwgdXN1YXJpbyBoYSB0b21hZG8gdW5hIGRlY2lzacOzbiBleHBsw61jaXRhICovXG4gIGhhc0RlY2lkZWQ6IGJvb2xlYW47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVWRU5UT1Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBOb21icmVzIGRlIGV2ZW50b3MgR0E0IHJlY29tZW5kYWRvcyArIGN1c3RvbXNcbiAqL1xuZXhwb3J0IHR5cGUgQW5hbHl0aWNzRXZlbnROYW1lID1cbiAgLy8gR0E0IFJlY29tbWVuZGVkIEV2ZW50cyAtIEVjb21tZXJjZVxuICB8ICdhZGRfcGF5bWVudF9pbmZvJ1xuICB8ICdhZGRfc2hpcHBpbmdfaW5mbydcbiAgfCAnYWRkX3RvX2NhcnQnXG4gIHwgJ2FkZF90b193aXNobGlzdCdcbiAgfCAnYmVnaW5fY2hlY2tvdXQnXG4gIHwgJ3B1cmNoYXNlJ1xuICB8ICdyZWZ1bmQnXG4gIHwgJ3JlbW92ZV9mcm9tX2NhcnQnXG4gIHwgJ3ZpZXdfY2FydCdcbiAgfCAndmlld19pdGVtJ1xuICB8ICd2aWV3X2l0ZW1fbGlzdCdcbiAgLy8gR0E0IFJlY29tbWVuZGVkIEV2ZW50cyAtIEVuZ2FnZW1lbnRcbiAgfCAnZ2VuZXJhdGVfbGVhZCdcbiAgfCAnbG9naW4nXG4gIHwgJ3BhZ2VfdmlldydcbiAgfCAnc2NyZWVuX3ZpZXcnXG4gIHwgJ3NlYXJjaCdcbiAgfCAnc2VsZWN0X2NvbnRlbnQnXG4gIHwgJ3NlbGVjdF9pdGVtJ1xuICB8ICdzZWxlY3RfcHJvbW90aW9uJ1xuICB8ICdzaGFyZSdcbiAgfCAnc2lnbl91cCdcbiAgfCAndmlld19wcm9tb3Rpb24nXG4gIC8vIEN1c3RvbSBFdmVudHMgKGFwcC1zcGVjaWZpYylcbiAgfCAnZmVhdHVyZV91c2VkJ1xuICB8ICdwcmVmZXJlbmNlX2NoYW5nZWQnXG4gIHwgJ29uYm9hcmRpbmdfc3RlcCdcbiAgfCAnZXJyb3Jfb2NjdXJyZWQnXG4gIHwgJ3BlcmZvcm1hbmNlX21ldHJpYydcbiAgLy8gQWxsb3cgY3VzdG9tIGV2ZW50c1xuICB8IHN0cmluZztcblxuLyoqXG4gKiBQYXLDoW1ldHJvcyB0aXBhZG9zIHBvciBldmVudG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmFseXRpY3NFdmVudFBhcmFtcyB7XG4gIC8vIEVjb21tZXJjZVxuICBhZGRfdG9fY2FydDoge1xuICAgIGl0ZW1faWQ6IHN0cmluZztcbiAgICBpdGVtX25hbWU/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgcXVhbnRpdHk/OiBudW1iZXI7XG4gIH07XG4gIHB1cmNoYXNlOiB7XG4gICAgdHJhbnNhY3Rpb25faWQ6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGN1cnJlbmN5Pzogc3RyaW5nO1xuICAgIGl0ZW1zPzogQW5hbHl0aWNzSXRlbVtdO1xuICAgIHRheD86IG51bWJlcjtcbiAgICBzaGlwcGluZz86IG51bWJlcjtcbiAgfTtcbiAgYmVnaW5fY2hlY2tvdXQ6IHtcbiAgICB2YWx1ZT86IG51bWJlcjtcbiAgICBjdXJyZW5jeT86IHN0cmluZztcbiAgICBpdGVtcz86IEFuYWx5dGljc0l0ZW1bXTtcbiAgfTtcbiAgdmlld19pdGVtOiB7XG4gICAgaXRlbV9pZDogc3RyaW5nO1xuICAgIGl0ZW1fbmFtZT86IHN0cmluZztcbiAgICB2YWx1ZT86IG51bWJlcjtcbiAgICBjdXJyZW5jeT86IHN0cmluZztcbiAgfTtcbiAgcmVtb3ZlX2Zyb21fY2FydDoge1xuICAgIGl0ZW1faWQ6IHN0cmluZztcbiAgICBpdGVtX25hbWU/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBudW1iZXI7XG4gIH07XG5cbiAgLy8gRW5nYWdlbWVudFxuICBsb2dpbjogeyBtZXRob2Q/OiBzdHJpbmcgfTtcbiAgc2lnbl91cDogeyBtZXRob2Q/OiBzdHJpbmcgfTtcbiAgc2VhcmNoOiB7IHNlYXJjaF90ZXJtOiBzdHJpbmcgfTtcbiAgc2hhcmU6IHsgY29udGVudF90eXBlPzogc3RyaW5nOyBpdGVtX2lkPzogc3RyaW5nOyBtZXRob2Q/OiBzdHJpbmcgfTtcbiAgc2VsZWN0X2NvbnRlbnQ6IHsgY29udGVudF90eXBlOiBzdHJpbmc7IGl0ZW1faWQ/OiBzdHJpbmcgfTtcbiAgcGFnZV92aWV3OiB7IHBhZ2VfcGF0aD86IHN0cmluZzsgcGFnZV90aXRsZT86IHN0cmluZzsgcGFnZV9sb2NhdGlvbj86IHN0cmluZyB9O1xuICBzY3JlZW5fdmlldzogeyBzY3JlZW5fbmFtZTogc3RyaW5nOyBzY3JlZW5fY2xhc3M/OiBzdHJpbmcgfTtcblxuICAvLyBDdXN0b21cbiAgZmVhdHVyZV91c2VkOiB7IGZlYXR1cmVfbmFtZTogc3RyaW5nOyBmZWF0dXJlX2NhdGVnb3J5Pzogc3RyaW5nIH07XG4gIHByZWZlcmVuY2VfY2hhbmdlZDogeyBwcmVmZXJlbmNlX25hbWU6IHN0cmluZzsgb2xkX3ZhbHVlPzogc3RyaW5nOyBuZXdfdmFsdWU/OiBzdHJpbmcgfTtcbiAgb25ib2FyZGluZ19zdGVwOiB7IHN0ZXBfbnVtYmVyOiBudW1iZXI7IHN0ZXBfbmFtZT86IHN0cmluZyB9O1xuICBlcnJvcl9vY2N1cnJlZDoge1xuICAgIGVycm9yX3R5cGU6IHN0cmluZztcbiAgICBlcnJvcl9tZXNzYWdlPzogc3RyaW5nO1xuICAgIGVycm9yX3N0YWNrPzogc3RyaW5nO1xuICAgIGNvbnRleHQ/OiBzdHJpbmc7XG4gIH07XG4gIHBlcmZvcm1hbmNlX21ldHJpYzogeyBtZXRyaWNfbmFtZTogc3RyaW5nOyB2YWx1ZTogbnVtYmVyOyB1bml0Pzogc3RyaW5nIH07XG5cbiAgLy8gQWxsb3cgY3VzdG9tIHBhcmFtc1xuICBba2V5OiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBJdGVtIHBhcmEgZXZlbnRvcyBkZSBlY29tbWVyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmFseXRpY3NJdGVtIHtcbiAgLyoqIElEIMO6bmljbyBkZWwgaXRlbSAqL1xuICBpdGVtX2lkOiBzdHJpbmc7XG4gIC8qKiBOb21icmUgZGVsIGl0ZW0gKi9cbiAgaXRlbV9uYW1lOiBzdHJpbmc7XG4gIC8qKiBDYXRlZ29yw61hIHByaW5jaXBhbCAqL1xuICBpdGVtX2NhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogU3ViY2F0ZWdvcsOtYXMgKi9cbiAgaXRlbV9jYXRlZ29yeTI/OiBzdHJpbmc7XG4gIGl0ZW1fY2F0ZWdvcnkzPzogc3RyaW5nO1xuICAvKiogTWFyY2EgKi9cbiAgaXRlbV9icmFuZD86IHN0cmluZztcbiAgLyoqIFZhcmlhbnRlIChlajogY29sb3IsIHRhbGxhKSAqL1xuICBpdGVtX3ZhcmlhbnQ/OiBzdHJpbmc7XG4gIC8qKiBQcmVjaW8gdW5pdGFyaW8gKi9cbiAgcHJpY2U/OiBudW1iZXI7XG4gIC8qKiBDYW50aWRhZCAqL1xuICBxdWFudGl0eT86IG51bWJlcjtcbiAgLyoqIE1vbmVkYSBJU08gNDIxNyAqL1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgLyoqIFBvc2ljacOzbiBlbiBsaXN0YSAqL1xuICBpbmRleD86IG51bWJlcjtcbiAgLyoqIEN1cMOzbiBhcGxpY2FkbyAqL1xuICBjb3Vwb24/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERFQlVHXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVGlwbyBkZSBldmVudG8gZGUgZGVidWdcbiAqL1xuZXhwb3J0IHR5cGUgRGVidWdFdmVudFR5cGUgPVxuICB8ICdldmVudCdcbiAgfCAncGFnZV92aWV3J1xuICB8ICdzY3JlZW5fdmlldydcbiAgfCAndXNlcl9wcm9wZXJ0eSdcbiAgfCAnZXJyb3InXG4gIHwgJ2NvbnNlbnQnXG4gIHwgJ3RpbWluZyc7XG5cbi8qKlxuICogRXZlbnRvIGRlIGRlYnVnIChzb2xvIGVuIGRlYnVnIG1vZGUpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzRGVidWdFdmVudCB7XG4gIC8qKiBUaW1lc3RhbXAgZGVsIGV2ZW50byAqL1xuICB0aW1lc3RhbXA6IERhdGU7XG4gIC8qKiBUaXBvIGRlIGV2ZW50byAqL1xuICB0eXBlOiBEZWJ1Z0V2ZW50VHlwZTtcbiAgLyoqIE5vbWJyZSBkZWwgZXZlbnRvICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFBhcsOhbWV0cm9zIGRlbCBldmVudG8gKi9cbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBTaSBmdWUgZW52aWFkbyBhIEZpcmViYXNlIChmYWxzZSBlbiBkZWJ1ZyBtb2RlKSAqL1xuICBzZW50OiBib29sZWFuO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUSU1JTkcgLyBQRVJGT1JNQU5DRVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE3DqXRyaWNhIGRlIHRpbWluZy9wZXJmb3JtYW5jZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWluZ01ldHJpYyB7XG4gIC8qKiBOb21icmUgZGUgbGEgbcOpdHJpY2EgKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVmFsb3IgZW4gbWlsaXNlZ3VuZG9zICovXG4gIHZhbHVlTXM6IG51bWJlcjtcbiAgLyoqIENhdGVnb3LDrWEgKGVqOiAnYXBpJywgJ3JlbmRlcicsICdsb2FkJykgKi9cbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIC8qKiBQYXLDoW1ldHJvcyBhZGljaW9uYWxlcyAqL1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVU0VSXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUHJvcGllZGFkZXMgZGUgdXN1YXJpbyBwYXJhIHNlZ21lbnRhY2nDs25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJvcGVydGllcyB7XG4gIC8qKiBJZGlvbWEgcHJlZmVyaWRvICovXG4gIHByZWZlcnJlZF9sYW5ndWFnZT86IHN0cmluZztcbiAgLyoqIE5pdmVsIGRlIHN1c2NyaXBjacOzbiAqL1xuICBzdWJzY3JpcHRpb25fdGllcj86IHN0cmluZztcbiAgLyoqIE9yZ2FuaXphY2nDs24gYWN0aXZhIChtdWx0aS10ZW5hbnQpICovXG4gIGFjdGl2ZV9vcmdhbml6YXRpb24/OiBzdHJpbmc7XG4gIC8qKiBQcm9waWVkYWRlcyBjdXN0b20gKi9cbiAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -87,7 +87,7 @@ export class AnalyticsService {
87
87
  this.setUserProperties(this.analyticsConfig.defaultUserProperties);
88
88
  }
89
89
  if (debugMode) {
90
- console.log('[Analytics] Inicializado en modo debug - eventos NO se envían a Firebase');
90
+ console.log('[Analytics] Inicializado en modo debug - eventos se loguean en consola Y se envían a Firebase');
91
91
  }
92
92
  }
93
93
  /**
@@ -206,11 +206,9 @@ export class AnalyticsService {
206
206
  if (!this.shouldSample()) {
207
207
  return;
208
208
  }
209
- // Debug mode: solo log, no enviar
209
+ // Debug mode: loguear en consola (pero seguir enviando a Firebase)
210
210
  if (this._isDebugMode()) {
211
- this.addToDebugHistory('event', eventName, params, false);
212
211
  console.log(`[Analytics] Event: ${eventName}`, params);
213
- return;
214
212
  }
215
213
  // Enviar a Firebase
216
214
  const analytics = this.getAnalyticsInstance();
@@ -221,8 +219,12 @@ export class AnalyticsService {
221
219
  }
222
220
  catch (error) {
223
221
  console.error('[Analytics] Error enviando evento:', error);
222
+ this.addToDebugHistory('event', eventName, params, false);
224
223
  }
225
224
  }
225
+ else {
226
+ this.addToDebugHistory('event', eventName, params, false);
227
+ }
226
228
  }
227
229
  // ===========================================================================
228
230
  // ECOMMERCE
@@ -284,20 +286,24 @@ export class AnalyticsService {
284
286
  if (!this.isAnalyticsSupported()) {
285
287
  return;
286
288
  }
289
+ // Debug mode: loguear en consola (pero seguir enviando a Firebase)
287
290
  if (this._isDebugMode()) {
288
291
  console.log(`[Analytics] Set userId: ${userId}`);
289
- this.addToDebugHistory('user_property', 'user_id', { userId }, false);
290
- return;
291
292
  }
292
293
  const analytics = this.getAnalyticsInstance();
293
294
  if (analytics) {
294
295
  try {
295
296
  setUserId(analytics, userId);
297
+ this.addToDebugHistory('user_property', 'user_id', { userId }, true);
296
298
  }
297
299
  catch (error) {
298
300
  console.error('[Analytics] Error seteando userId:', error);
301
+ this.addToDebugHistory('user_property', 'user_id', { userId }, false);
299
302
  }
300
303
  }
304
+ else {
305
+ this.addToDebugHistory('user_property', 'user_id', { userId }, false);
306
+ }
301
307
  }
302
308
  /**
303
309
  * Setea propiedades del usuario para segmentación.
@@ -316,10 +322,9 @@ export class AnalyticsService {
316
322
  if (!this.isAnalyticsSupported()) {
317
323
  return;
318
324
  }
325
+ // Debug mode: loguear en consola (pero seguir enviando a Firebase)
319
326
  if (this._isDebugMode()) {
320
327
  console.log('[Analytics] Set user properties:', properties);
321
- this.addToDebugHistory('user_property', 'properties', properties, false);
322
- return;
323
328
  }
324
329
  const analytics = this.getAnalyticsInstance();
325
330
  if (analytics) {
@@ -332,11 +337,16 @@ export class AnalyticsService {
332
337
  }
333
338
  }
334
339
  setUserProperties(analytics, stringProps);
340
+ this.addToDebugHistory('user_property', 'properties', properties, true);
335
341
  }
336
342
  catch (error) {
337
343
  console.error('[Analytics] Error seteando user properties:', error);
344
+ this.addToDebugHistory('user_property', 'properties', properties, false);
338
345
  }
339
346
  }
347
+ else {
348
+ this.addToDebugHistory('user_property', 'properties', properties, false);
349
+ }
340
350
  }
341
351
  /**
342
352
  * Setea la organización activa (multi-tenant).
@@ -483,6 +493,19 @@ export class AnalyticsService {
483
493
  updatedAt: parsed.updatedAt ? new Date(parsed.updatedAt) : null,
484
494
  });
485
495
  }
496
+ else if (this.analyticsConfig.defaultConsentGranted) {
497
+ // Auto-grant all consent para desarrollo/testing
498
+ this._consentState.set({
499
+ settings: {
500
+ analytics: true,
501
+ advertising: true,
502
+ functionality: true,
503
+ security: true,
504
+ },
505
+ updatedAt: new Date(),
506
+ hasDecided: true,
507
+ });
508
+ }
486
509
  else if (this.analyticsConfig.defaultConsent) {
487
510
  // Aplicar consent por defecto si no hay guardado
488
511
  this._consentState.set({
@@ -543,7 +566,7 @@ export class AnalyticsService {
543
566
  // ===========================================================================
544
567
  /**
545
568
  * Habilita/deshabilita modo debug.
546
- * En debug: logea a consola, no envía a Firebase.
569
+ * En debug: logea eventos a consola además de enviarlos a Firebase.
547
570
  */
548
571
  setDebugMode(enabled) {
549
572
  this._isDebugMode.set(enabled);
@@ -594,4 +617,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
594
617
  type: Inject,
595
618
  args: [PLATFORM_ID]
596
619
  }] }] });
597
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2FuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWVuRCw2REFBNkQ7QUFDN0QsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQztBQUV4RCw4Q0FBOEM7QUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFrQzNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQjtRQUZ2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2UsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXBDakQsOEVBQThFO1FBQzlFLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFFN0Qsa0JBQWEsR0FBRyxNQUFNLENBQWU7WUFDcEQsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUVjLGlCQUFZLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsTUFBTSxDQUF3QixF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QXFDN0IsTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUM5QixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuYWx5dGljcyBTZXJ2aWNlIChGaXJlYmFzZSBHQTQpXG4gKlxuICogU2VydmljaW8gcGFyYSB0cmFja2luZyBkZSBldmVudG9zLCBwYWdlIHZpZXdzIHkgZXJyb3JlcyBjb24gRmlyZWJhc2UgQW5hbHl0aWNzLlxuICogSW50ZWdyYSBjb24gZWwgc2lzdGVtYSBkZSBhdXRoIHBhcmEgdXNlciBwcm9wZXJ0aWVzIHkgcmVzcGV0YSBjb25zZW50IG1vZGUgR0RQUi5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBQTEFURk9STV9JRCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQW5hbHl0aWNzLCBsb2dFdmVudCwgc2V0VXNlcklkLCBzZXRVc2VyUHJvcGVydGllcyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYW5hbHl0aWNzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBWYWx0ZWNoRmlyZWJhc2VDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIEFuYWx5dGljc0NvbmZpZyxcbiAgQW5hbHl0aWNzRGVidWdFdmVudCxcbiAgQW5hbHl0aWNzRXZlbnROYW1lLFxuICBBbmFseXRpY3NFdmVudFBhcmFtcyxcbiAgQW5hbHl0aWNzSXRlbSxcbiAgQ29uc2VudFNldHRpbmdzLFxuICBDb25zZW50U3RhdGUsXG4gIERlYnVnRXZlbnRUeXBlLFxuICBUaW1pbmdNZXRyaWMsXG4gIFVzZXJQcm9wZXJ0aWVzLFxufSBmcm9tICcuL2FuYWx5dGljcy10eXBlcyc7XG5cbi8qKiBLZXkgcG9yIGRlZmVjdG8gcGFyYSBwZXJzaXN0aXIgY29uc2VudCBlbiBsb2NhbFN0b3JhZ2UgKi9cbmNvbnN0IERFRkFVTFRfQ09OU0VOVF9TVE9SQUdFX0tFWSA9ICdhbmFseXRpY3NfY29uc2VudCc7XG5cbi8qKiBNw6F4aW1vIGRlIGV2ZW50b3MgZW4gaGlzdG9yaWFsIGRlIGRlYnVnICovXG5jb25zdCBNQVhfREVCVUdfSElTVE9SWSA9IDEwMDtcblxuLyoqXG4gKiBTZXJ2aWNpbyBkZSBGaXJlYmFzZSBBbmFseXRpY3MgKEdBNCkuXG4gKlxuICogUHJvcG9yY2lvbmEgdHJhY2tpbmcgZGUgZXZlbnRvcywgcGFnZSB2aWV3cywgZXJyb3JlcyB5IG3DqXRyaWNhcyBkZSBwZXJmb3JtYW5jZS5cbiAqIFNvcG9ydGEgR0RQUiBDb25zZW50IE1vZGUgeSBtb2RvIGRlYnVnIHBhcmEgZGVzYXJyb2xsby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBQcm9kdWN0Q29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBhbmFseXRpY3MgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XG4gKlxuICogICBvblB1cmNoYXNlKHByb2R1Y3Q6IFByb2R1Y3QpIHtcbiAqICAgICB0aGlzLmFuYWx5dGljcy5sb2dFdmVudCgncHVyY2hhc2UnLCB7XG4gKiAgICAgICB0cmFuc2FjdGlvbl9pZDogb3JkZXIuaWQsXG4gKiAgICAgICB2YWx1ZTogb3JkZXIudG90YWwsXG4gKiAgICAgICBjdXJyZW5jeTogJ0VVUidcbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzU2VydmljZSB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFU1RBRE8gKFNpZ25hbHMpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbnNlbnRTdGF0ZSA9IHNpZ25hbDxDb25zZW50U3RhdGU+KHtcbiAgICBzZXR0aW5nczoge30sXG4gICAgdXBkYXRlZEF0OiBudWxsLFxuICAgIGhhc0RlY2lkZWQ6IGZhbHNlLFxuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pc0RlYnVnTW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnSGlzdG9yeSA9IHNpZ25hbDxBbmFseXRpY3NEZWJ1Z0V2ZW50W10+KFtdKTtcblxuICAvKiogRXN0YWRvIGRlIGNvbnNlbnRpbWllbnRvIGFjdHVhbCAocmVhZG9ubHkpICovXG4gIHJlYWRvbmx5IGNvbnNlbnRTdGF0ZSA9IHRoaXMuX2NvbnNlbnRTdGF0ZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIEluZGljYSBzaSBlc3TDoSBlbiBtb2RvIGRlYnVnICovXG4gIHJlYWRvbmx5IGlzRGVidWdNb2RlID0gdGhpcy5faXNEZWJ1Z01vZGUuYXNSZWFkb25seSgpO1xuXG4gIC8qKiBJbmRpY2Egc2kgYW5hbHl0aWNzIGVzdMOhIGhhYmlsaXRhZG8geSBmdW5jaW9uYW5kbyAqL1xuICByZWFkb25seSBpc0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSAmJiB0aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncy5hbmFseXRpY3MgPT09IHRydWU7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT05GSUdVUkFDScOTTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFuYWx5dGljc0NvbmZpZzogQW5hbHl0aWNzQ29uZmlnO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnNlbnRTdG9yYWdlS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRQcmVmaXg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzYW1wbGluZ1JhdGU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBASW5qZWN0KFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEZpcmViYXNlQ29uZmlnLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0XG4gICkge1xuICAgIHRoaXMuYW5hbHl0aWNzQ29uZmlnID0gY29uZmlnLmFuYWx5dGljc0NvbmZpZyA/PyB7fTtcbiAgICB0aGlzLmNvbnNlbnRTdG9yYWdlS2V5ID1cbiAgICAgIHRoaXMuYW5hbHl0aWNzQ29uZmlnLmNvbnNlbnRTdG9yYWdlS2V5ID8/IERFRkFVTFRfQ09OU0VOVF9TVE9SQUdFX0tFWTtcbiAgICB0aGlzLmV2ZW50UHJlZml4ID0gdGhpcy5hbmFseXRpY3NDb25maWcuZXZlbnRQcmVmaXggPz8gJyc7XG4gICAgdGhpcy5zYW1wbGluZ1JhdGUgPSB0aGlzLmFuYWx5dGljc0NvbmZpZy5zYW1wbGluZ1JhdGUgPz8gMS4wO1xuXG4gICAgdGhpcy5pbml0aWFsaXplQW5hbHl0aWNzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5JQ0lBTElaQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWFsaXphIGVsIHNlcnZpY2lvIGRlIGFuYWx5dGljc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQW5hbHl0aWNzKCk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENhcmdhciBjb25zZW50IGRlc2RlIGxvY2FsU3RvcmFnZVxuICAgIHRoaXMubG9hZENvbnNlbnRGcm9tU3RvcmFnZSgpO1xuXG4gICAgLy8gQ29uZmlndXJhciBkZWJ1ZyBtb2RlXG4gICAgY29uc3QgZGVidWdNb2RlID0gdGhpcy5hbmFseXRpY3NDb25maWcuZGVidWdNb2RlID8/IGZhbHNlO1xuICAgIHRoaXMuX2lzRGVidWdNb2RlLnNldChkZWJ1Z01vZGUpO1xuXG4gICAgLy8gQXBsaWNhciBjb25zZW50IGluaWNpYWwgYSBndGFnXG4gICAgdGhpcy5hcHBseUNvbnNlbnRUb0d0YWcodGhpcy5fY29uc2VudFN0YXRlKCkuc2V0dGluZ3MpO1xuXG4gICAgLy8gU2V0ZWFyIHVzZXIgcHJvcGVydGllcyBwb3IgZGVmZWN0b1xuICAgIGlmICh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0VXNlclByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuc2V0VXNlclByb3BlcnRpZXModGhpcy5hbmFseXRpY3NDb25maWcuZGVmYXVsdFVzZXJQcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBpZiAoZGVidWdNb2RlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW0FuYWx5dGljc10gSW5pY2lhbGl6YWRvIGVuIG1vZG8gZGVidWcgLSBldmVudG9zIE5PIHNlIGVudsOtYW4gYSBGaXJlYmFzZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxhIGluc3RhbmNpYSBkZSBBbmFseXRpY3MgZGUgZm9ybWEgcGVyZXpvc2EuXG4gICAqIEVzdG8gZXZpdGEgZWwgZXJyb3IgZGUgQVBQX0lOSVRJQUxJWkVSIGRlIEFuZ3VsYXJGaXJlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBbmFseXRpY3NJbnN0YW5jZSgpOiBBbmFseXRpY3MgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZUFuYWx5dGljcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldChBbmFseXRpY3MsIG51bGwpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIEFuYWx5dGljcyBlc3TDoSBzb3BvcnRhZG9cbiAgICovXG4gIHByaXZhdGUgaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVBbmFseXRpY3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZpcmViYXNlLm1lYXN1cmVtZW50SWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FuYWx5dGljc10gbWVhc3VyZW1lbnRJZCBubyBjb25maWd1cmFkbyBlbiBmaXJlYmFzZSBjb25maWcnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBkZWJlIGVudmlhciBlbCBldmVudG8gKHNhbXBsaW5nKVxuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRTYW1wbGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2FtcGxpbmdSYXRlID49IDEuMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpIDwgdGhpcy5zYW1wbGluZ1JhdGU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEFHRSBWSUVXU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gcGFnZSB2aWV3LlxuICAgKiBOb3JtYWxtZW50ZSBzZSB1c2EgYXV0b23DoXRpY2FtZW50ZSB2aWEgQW5hbHl0aWNzUm91dGVyVHJhY2tlci5cbiAgICpcbiAgICogQHBhcmFtIHBhZ2VQYXRoIC0gUnV0YSBkZSBsYSBww6FnaW5hIChlajogJy9wcm9kdWN0cy8xMjMnKVxuICAgKiBAcGFyYW0gcGFnZVRpdGxlIC0gVMOtdHVsbyBkZSBsYSBww6FnaW5hIChvcGNpb25hbClcbiAgICovXG4gIGxvZ1BhZ2VWaWV3KHBhZ2VQYXRoOiBzdHJpbmcsIHBhZ2VUaXRsZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3BhZ2VfdmlldycsIHtcbiAgICAgIHBhZ2VfcGF0aDogcGFnZVBhdGgsXG4gICAgICBwYWdlX3RpdGxlOiBwYWdlVGl0bGUgPz8gZG9jdW1lbnQ/LnRpdGxlLFxuICAgICAgcGFnZV9sb2NhdGlvbjogd2luZG93Py5sb2NhdGlvbj8uaHJlZixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBzY3JlZW4gdmlldyAocGFyYSBhcHBzIHRpcG8gU1BBKS5cbiAgICpcbiAgICogQHBhcmFtIHNjcmVlbk5hbWUgLSBOb21icmUgZGVsIHNjcmVlblxuICAgKiBAcGFyYW0gc2NyZWVuQ2xhc3MgLSBDbGFzZSBkZWwgc2NyZWVuIChvcGNpb25hbClcbiAgICovXG4gIGxvZ1NjcmVlblZpZXcoc2NyZWVuTmFtZTogc3RyaW5nLCBzY3JlZW5DbGFzcz86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3NjcmVlbl92aWV3Jywge1xuICAgICAgc2NyZWVuX25hbWU6IHNjcmVlbk5hbWUsXG4gICAgICBzY3JlZW5fY2xhc3M6IHNjcmVlbkNsYXNzLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVWRU5UT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIGV2ZW50byB0aXBhZG8gR0E0LlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gTm9tYnJlIGRlbCBldmVudG8gKHRpcGFkbylcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcsOhbWV0cm9zIGRlbCBldmVudG8gKHRpcGFkb3Mgc2Vnw7puIGVsIG5vbWJyZSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBFdmVudG8gdGlwYWRvIGNvbiBhdXRvY29tcGxldGFkb1xuICAgKiBhbmFseXRpY3MubG9nRXZlbnQoJ2FkZF90b19jYXJ0Jywge1xuICAgKiAgIGl0ZW1faWQ6ICcxMjMnLFxuICAgKiAgIGl0ZW1fbmFtZTogJ1Byb2R1Y3RvJyxcbiAgICogICB2YWx1ZTogOTkuOTksXG4gICAqICAgY3VycmVuY3k6ICdFVVInXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGxvZ0V2ZW50PFQgZXh0ZW5kcyBBbmFseXRpY3NFdmVudE5hbWU+KFxuICAgIGV2ZW50TmFtZTogVCxcbiAgICBwYXJhbXM/OiBBbmFseXRpY3NFdmVudFBhcmFtc1tUXVxuICApOiB2b2lkIHtcbiAgICB0aGlzLnRyYWNrRXZlbnQoZXZlbnROYW1lLCBwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIGV2ZW50byBjdXN0b20gY29uIHBhcsOhbWV0cm9zIGxpYnJlcy5cbiAgICogVXNhciBjdWFuZG8gZWwgZXZlbnRvIG5vIGVzdMOhIGVuIGVsIGNhdMOhbG9nbyB0aXBhZG8uXG4gICAqXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBOb21icmUgZGVsIGV2ZW50byBjdXN0b21cbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcsOhbWV0cm9zIGxpYnJlc1xuICAgKi9cbiAgbG9nQ3VzdG9tRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgY29uc3QgcHJlZml4ZWROYW1lID0gdGhpcy5ldmVudFByZWZpeCArIGV2ZW50TmFtZTtcbiAgICB0aGlzLnRyYWNrRXZlbnQocHJlZml4ZWROYW1lLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEzDs2dpY2EgY29tw7puIHBhcmEgZW52aWFyIGV2ZW50b3NcbiAgICovXG4gIHByaXZhdGUgdHJhY2tFdmVudChldmVudE5hbWU6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBWZXJpZmljYXIgY29uc2VudFxuICAgIGlmICghdGhpcy5fY29uc2VudFN0YXRlKCkuc2V0dGluZ3MuYW5hbHl0aWNzKSB7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCdldmVudCcsIGV2ZW50TmFtZSwgcGFyYW1zLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXBsaWNhciBzYW1wbGluZ1xuICAgIGlmICghdGhpcy5zaG91bGRTYW1wbGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlYnVnIG1vZGU6IHNvbG8gbG9nLCBubyBlbnZpYXJcbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnZXZlbnQnLCBldmVudE5hbWUsIHBhcmFtcywgZmFsc2UpO1xuICAgICAgY29uc29sZS5sb2coYFtBbmFseXRpY3NdIEV2ZW50OiAke2V2ZW50TmFtZX1gLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEVudmlhciBhIEZpcmViYXNlXG4gICAgY29uc3QgYW5hbHl0aWNzID0gdGhpcy5nZXRBbmFseXRpY3NJbnN0YW5jZSgpO1xuICAgIGlmIChhbmFseXRpY3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ0V2ZW50KGFuYWx5dGljcywgZXZlbnROYW1lIGFzIHN0cmluZywgcGFyYW1zKTtcbiAgICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnZXZlbnQnLCBldmVudE5hbWUsIHBhcmFtcywgdHJ1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQW5hbHl0aWNzXSBFcnJvciBlbnZpYW5kbyBldmVudG86JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFQ09NTUVSQ0VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHZpc3RhIGRlIGl0ZW1cbiAgICovXG4gIGxvZ1ZpZXdJdGVtKGl0ZW06IEFuYWx5dGljc0l0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCd2aWV3X2l0ZW0nLCB7XG4gICAgICBpdGVtX2lkOiBpdGVtLml0ZW1faWQsXG4gICAgICBpdGVtX25hbWU6IGl0ZW0uaXRlbV9uYW1lLFxuICAgICAgdmFsdWU6IGl0ZW0ucHJpY2UsXG4gICAgICBjdXJyZW5jeTogaXRlbS5jdXJyZW5jeSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBhZ3JlZ2FyIGFsIGNhcnJpdG9cbiAgICovXG4gIGxvZ0FkZFRvQ2FydChpdGVtOiBBbmFseXRpY3NJdGVtLCBxdWFudGl0eSA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhZGRfdG9fY2FydCcsIHtcbiAgICAgIGl0ZW1faWQ6IGl0ZW0uaXRlbV9pZCxcbiAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICB2YWx1ZTogKGl0ZW0ucHJpY2UgPz8gMCkgKiBxdWFudGl0eSxcbiAgICAgIGN1cnJlbmN5OiBpdGVtLmN1cnJlbmN5LFxuICAgICAgcXVhbnRpdHksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgaW5pY2lvIGRlIGNoZWNrb3V0XG4gICAqL1xuICBsb2dCZWdpbkNoZWNrb3V0KGl0ZW1zOiBBbmFseXRpY3NJdGVtW10sIHZhbHVlOiBudW1iZXIsIGN1cnJlbmN5ID0gJ0VVUicpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdiZWdpbl9jaGVja291dCcsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgY3VycmVuY3ksXG4gICAgICBpdGVtcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBjb21wcmEgY29tcGxldGFkYVxuICAgKi9cbiAgbG9nUHVyY2hhc2UoXG4gICAgdHJhbnNhY3Rpb25JZDogc3RyaW5nLFxuICAgIGl0ZW1zOiBBbmFseXRpY3NJdGVtW10sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBjdXJyZW5jeSA9ICdFVVInXG4gICk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3B1cmNoYXNlJywge1xuICAgICAgdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGN1cnJlbmN5LFxuICAgICAgaXRlbXMsXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVVNFUiBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTZXRlYSBlbCB1c2VySWQgcGFyYSBhc29jaWFyIGV2ZW50b3MgY29uIGVsIHVzdWFyaW8uXG4gICAqIExsYW1hZG8gYXV0b23DoXRpY2FtZW50ZSBzaSBlbmFibGVBdXRoSW50ZWdyYXRpb249dHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJJZCAtIElEIGRlbCB1c3VhcmlvIG8gbnVsbCBwYXJhIGxpbXBpYXJcbiAgICovXG4gIHNldFVzZXJJZCh1c2VySWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0FuYWx5dGljc10gU2V0IHVzZXJJZDogJHt1c2VySWR9YCk7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3VzZXJfaWQnLCB7IHVzZXJJZCB9LCBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5hbHl0aWNzID0gdGhpcy5nZXRBbmFseXRpY3NJbnN0YW5jZSgpO1xuICAgIGlmIChhbmFseXRpY3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFVzZXJJZChhbmFseXRpY3MsIHVzZXJJZCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQW5hbHl0aWNzXSBFcnJvciBzZXRlYW5kbyB1c2VySWQ6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRlYSBwcm9waWVkYWRlcyBkZWwgdXN1YXJpbyBwYXJhIHNlZ21lbnRhY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gUHJvcGllZGFkZXMga2V5LXZhbHVlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYW5hbHl0aWNzLnNldFVzZXJQcm9wZXJ0aWVzKHtcbiAgICogICBzdWJzY3JpcHRpb25fdGllcjogJ3ByZW1pdW0nLFxuICAgKiAgIHByZWZlcnJlZF9sYW5ndWFnZTogJ2VzJ1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBzZXRVc2VyUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBVc2VyUHJvcGVydGllcyB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coJ1tBbmFseXRpY3NdIFNldCB1c2VyIHByb3BlcnRpZXM6JywgcHJvcGVydGllcyk7XG4gICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3Byb3BlcnRpZXMnLCBwcm9wZXJ0aWVzLCBmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYW5hbHl0aWNzID0gdGhpcy5nZXRBbmFseXRpY3NJbnN0YW5jZSgpO1xuICAgIGlmIChhbmFseXRpY3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENvbnZlcnRpciBhIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gcGFyYSBGaXJlYmFzZVxuICAgICAgICBjb25zdCBzdHJpbmdQcm9wczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSkge1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHJpbmdQcm9wc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VXNlclByb3BlcnRpZXMoYW5hbHl0aWNzLCBzdHJpbmdQcm9wcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdbQW5hbHl0aWNzXSBFcnJvciBzZXRlYW5kbyB1c2VyIHByb3BlcnRpZXM6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRlYSBsYSBvcmdhbml6YWNpw7NuIGFjdGl2YSAobXVsdGktdGVuYW50KS5cbiAgICogTGxhbWFkbyBhdXRvbcOhdGljYW1lbnRlIHNpIGVuYWJsZUF1dGhJbnRlZ3JhdGlvbj10cnVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgLSBJRCBkZSBsYSBvcmdhbml6YWNpw7NuIG8gbnVsbFxuICAgKi9cbiAgc2V0QWN0aXZlT3JnYW5pemF0aW9uKG9yZ0lkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICB0aGlzLnNldFVzZXJQcm9wZXJ0aWVzKHsgYWN0aXZlX29yZ2FuaXphdGlvbjogb3JnSWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVSUk9SIFRSQUNLSU5HXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBlcnJvciBwYXJhIHRyYWNraW5nLlxuICAgKiBJbnRlZ3JhIGF1dG9tw6F0aWNhbWVudGUgY29uIEFuZ3VsYXIgRXJyb3JIYW5kbGVyIHNpIGVuYWJsZUVycm9yVHJhY2tpbmc9dHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gRXJyb3IgbyBtZW5zYWplIGRlIGVycm9yXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gQ29udGV4dG8gYWRpY2lvbmFsXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdHJ5IHtcbiAgICogICBhd2FpdCByaXNreU9wZXJhdGlvbigpO1xuICAgKiB9IGNhdGNoIChlcnJvcikge1xuICAgKiAgIGFuYWx5dGljcy5sb2dFcnJvcihlcnJvciwgeyBjb250ZXh0OiAnY2hlY2tvdXRfZmxvdycgfSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBsb2dFcnJvcihlcnJvcjogRXJyb3IgfCBzdHJpbmcsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcjtcbiAgICBjb25zdCBlcnJvclN0YWNrID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVycm9yVHlwZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5uYW1lIDogJ0Vycm9yJztcblxuICAgIHRoaXMubG9nRXZlbnQoJ2Vycm9yX29jY3VycmVkJywge1xuICAgICAgZXJyb3JfdHlwZTogZXJyb3JUeXBlLFxuICAgICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLnN1YnN0cmluZygwLCAxMDApLCAvLyBMaW1pdGFyIGxvbmdpdHVkXG4gICAgICBlcnJvcl9zdGFjazogZXJyb3JTdGFjaz8uc3Vic3RyaW5nKDAsIDUwMCksXG4gICAgICBjb250ZXh0OiBjb250ZXh0ID8gSlNPTi5zdHJpbmdpZnkoY29udGV4dCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gZXJyb3IgZmF0YWwgKGNyYXNoLWxldmVsKS5cbiAgICovXG4gIGxvZ0ZhdGFsRXJyb3IoZXJyb3I6IEVycm9yLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubG9nRXJyb3IoZXJyb3IsIHsgLi4uY29udGV4dCwgc2V2ZXJpdHk6ICdmYXRhbCcgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09OU0VOVCBNT0RFIChHRFBSKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGVzdGFkbyBkZSBjb25zZW50aW1pZW50byBkZWwgdXN1YXJpby5cbiAgICogQWZlY3RhIHF1w6kgZGF0b3Mgc2UgcmVjb2xlY3RhbiB5IGVudsOtYW4uXG4gICAqXG4gICAqIEBwYXJhbSBjb25zZW50IC0gU2V0dGluZ3MgZGUgY29uc2VudGltaWVudG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBVc3VhcmlvIGFjZXB0YSB0b2RvXG4gICAqIGFuYWx5dGljcy51cGRhdGVDb25zZW50KHsgYW5hbHl0aWNzOiB0cnVlLCBhZHZlcnRpc2luZzogdHJ1ZSB9KTtcbiAgICpcbiAgICogLy8gVXN1YXJpbyByZWNoYXphIHB1YmxpY2lkYWRcbiAgICogYW5hbHl0aWNzLnVwZGF0ZUNvbnNlbnQoeyBhbmFseXRpY3M6IHRydWUsIGFkdmVydGlzaW5nOiBmYWxzZSB9KTtcbiAgICogYGBgXG4gICAqL1xuICB1cGRhdGVDb25zZW50KGNvbnNlbnQ6IENvbnNlbnRTZXR0aW5ncyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1N0YXRlOiBDb25zZW50U3RhdGUgPSB7XG4gICAgICBzZXR0aW5nczogeyAuLi50aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncywgLi4uY29uc2VudCB9LFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgaGFzRGVjaWRlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5fY29uc2VudFN0YXRlLnNldChuZXdTdGF0ZSk7XG4gICAgdGhpcy5zYXZlQ29uc2VudFRvU3RvcmFnZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5hcHBseUNvbnNlbnRUb0d0YWcobmV3U3RhdGUuc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnY29uc2VudCcsICd1cGRhdGUnLCBjb25zZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZW5pZWdhIHRvZG8gY29uc2VudGltaWVudG8uXG4gICAqL1xuICBkZW55QWxsQ29uc2VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnNlbnQoe1xuICAgICAgYW5hbHl0aWNzOiBmYWxzZSxcbiAgICAgIGFkdmVydGlzaW5nOiBmYWxzZSxcbiAgICAgIGZ1bmN0aW9uYWxpdHk6IGZhbHNlLFxuICAgICAgc2VjdXJpdHk6IHRydWUsIC8vIFNpZW1wcmUgcGVybWl0aWRvXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNlcHRhIHRvZG8gY29uc2VudGltaWVudG8uXG4gICAqL1xuICBncmFudEFsbENvbnNlbnQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25zZW50KHtcbiAgICAgIGFuYWx5dGljczogdHJ1ZSxcbiAgICAgIGFkdmVydGlzaW5nOiB0cnVlLFxuICAgICAgZnVuY3Rpb25hbGl0eTogdHJ1ZSxcbiAgICAgIHNlY3VyaXR5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGFjdHVhbCBkZSBjb25zZW50aW1pZW50by5cbiAgICovXG4gIGdldENvbnNlbnRTdGF0ZSgpOiBDb25zZW50U3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9jb25zZW50U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgY29uc2VudCBzZXR0aW5ncyBhIGd0YWcgKEdBNCBDb25zZW50IE1vZGUgdjIpXG4gICAqL1xuICBwcml2YXRlIGFwcGx5Q29uc2VudFRvR3RhZyhzZXR0aW5nczogQ29uc2VudFNldHRpbmdzKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ3RhZyA9ICh3aW5kb3cgYXMgYW55KS5ndGFnO1xuICAgIGlmICh0eXBlb2YgZ3RhZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBndGFnKCdjb25zZW50JywgJ3VwZGF0ZScsIHtcbiAgICAgICAgYW5hbHl0aWNzX3N0b3JhZ2U6IHNldHRpbmdzLmFuYWx5dGljcyA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBhZF9zdG9yYWdlOiBzZXR0aW5ncy5hZHZlcnRpc2luZyA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBhZF91c2VyX2RhdGE6IHNldHRpbmdzLmFkdmVydGlzaW5nID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgIGFkX3BlcnNvbmFsaXphdGlvbjogc2V0dGluZ3MuYWR2ZXJ0aXNpbmcgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgZnVuY3Rpb25hbGl0eV9zdG9yYWdlOiBzZXR0aW5ncy5mdW5jdGlvbmFsaXR5ID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgIHNlY3VyaXR5X3N0b3JhZ2U6IHNldHRpbmdzLnNlY3VyaXR5ICE9PSBmYWxzZSA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FuYWx5dGljc10gRXJyb3IgYXBsaWNhbmRvIGNvbnNlbnQgYSBndGFnOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FyZ2EgY29uc2VudCBkZXNkZSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgbG9hZENvbnNlbnRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5jb25zZW50U3RvcmFnZUtleSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBDb25zZW50U3RhdGU7XG4gICAgICAgIHRoaXMuX2NvbnNlbnRTdGF0ZS5zZXQoe1xuICAgICAgICAgIC4uLnBhcnNlZCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHBhcnNlZC51cGRhdGVkQXQgPyBuZXcgRGF0ZShwYXJzZWQudXBkYXRlZEF0KSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudCkge1xuICAgICAgICAvLyBBcGxpY2FyIGNvbnNlbnQgcG9yIGRlZmVjdG8gc2kgbm8gaGF5IGd1YXJkYWRvXG4gICAgICAgIHRoaXMuX2NvbnNlbnRTdGF0ZS5zZXQoe1xuICAgICAgICAgIHNldHRpbmdzOiB0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG51bGwsXG4gICAgICAgICAgaGFzRGVjaWRlZDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGNhcmdhbmRvIGNvbnNlbnQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHdWFyZGEgY29uc2VudCBlbiBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNvbnNlbnRUb1N0b3JhZ2Uoc3RhdGU6IENvbnNlbnRTdGF0ZSk6IHZvaWQge1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbnNlbnRTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBbmFseXRpY3NdIEVycm9yIGd1YXJkYW5kbyBjb25zZW50OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVElNSU5HIC8gUEVSRk9STUFOQ0VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuYSBtw6l0cmljYSBkZSB0aW1pbmcvcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gTm9tYnJlIGRlIGxhIG3DqXRyaWNhXG4gICAqIEBwYXJhbSB2YWx1ZU1zIC0gVmFsb3IgZW4gbWlsaXNlZ3VuZG9zXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXLDoW1ldHJvcyBhZGljaW9uYWxlc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAqIGF3YWl0IGxvYWREYXRhKCk7XG4gICAqIGFuYWx5dGljcy5sb2dUaW1pbmcoJ2RhdGFfbG9hZCcsIHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnQsIHtcbiAgICogICBjYXRlZ29yeTogJ2FwaScsXG4gICAqICAgZW5kcG9pbnQ6ICcvcHJvZHVjdHMnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGxvZ1RpbWluZyhuYW1lOiBzdHJpbmcsIHZhbHVlTXM6IG51bWJlciwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3BlcmZvcm1hbmNlX21ldHJpYycsIHtcbiAgICAgIG1ldHJpY19uYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IE1hdGgucm91bmQodmFsdWVNcyksXG4gICAgICB1bml0OiAnbXMnLFxuICAgICAgLi4ucGFyYW1zLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIERFQlVHXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBIYWJpbGl0YS9kZXNoYWJpbGl0YSBtb2RvIGRlYnVnLlxuICAgKiBFbiBkZWJ1ZzogbG9nZWEgYSBjb25zb2xhLCBubyBlbnbDrWEgYSBGaXJlYmFzZS5cbiAgICovXG4gIHNldERlYnVnTW9kZShlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faXNEZWJ1Z01vZGUuc2V0KGVuYWJsZWQpO1xuICAgIGNvbnNvbGUubG9nKGBbQW5hbHl0aWNzXSBEZWJ1ZyBtb2RlOiAke2VuYWJsZWQgPyAnT04nIDogJ09GRid9YCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBoaXN0b3JpYWwgZGUgZXZlbnRvcyAoc29sbyBlbiBkZWJ1ZyBtb2RlKS5cbiAgICogw5p0aWwgcGFyYSB0ZXN0aW5nIHkgZGVzYXJyb2xsby5cbiAgICovXG4gIGdldERlYnVnSGlzdG9yeSgpOiBBbmFseXRpY3NEZWJ1Z0V2ZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9kZWJ1Z0hpc3RvcnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgaGlzdG9yaWFsIGRlIGRlYnVnLlxuICAgKi9cbiAgY2xlYXJEZWJ1Z0hpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5fZGVidWdIaXN0b3J5LnNldChbXSk7XG4gIH1cblxuICAvKipcbiAgICogQWdyZWdhIGV2ZW50byBhbCBoaXN0b3JpYWwgZGUgZGVidWdcbiAgICovXG4gIHByaXZhdGUgYWRkVG9EZWJ1Z0hpc3RvcnkoXG4gICAgdHlwZTogRGVidWdFdmVudFR5cGUsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHNlbnQgPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudDogQW5hbHl0aWNzRGVidWdFdmVudCA9IHtcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIHR5cGUsXG4gICAgICBuYW1lLFxuICAgICAgcGFyYW1zLFxuICAgICAgc2VudCxcbiAgICB9O1xuXG4gICAgdGhpcy5fZGVidWdIaXN0b3J5LnVwZGF0ZSgoaGlzdG9yeSkgPT4ge1xuICAgICAgY29uc3QgbmV3SGlzdG9yeSA9IFtldmVudCwgLi4uaGlzdG9yeV07XG4gICAgICByZXR1cm4gbmV3SGlzdG9yeS5zbGljZSgwLCBNQVhfREVCVUdfSElTVE9SWSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
620
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2FuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQWVuRCw2REFBNkQ7QUFDN0QsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQztBQUV4RCw4Q0FBOEM7QUFDOUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFrQzNCLFlBQ1UsUUFBa0IsRUFDZSxNQUE2QixFQUN6QyxVQUFrQjtRQUZ2QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2UsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDekMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXBDakQsOEVBQThFO1FBQzlFLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFFN0Qsa0JBQWEsR0FBRyxNQUFNLENBQWU7WUFDcEQsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztRQUVjLGlCQUFZLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsTUFBTSxDQUF3QixF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Q25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQ3ZCLElBQW9CLEVBQ3BCLElBQVksRUFDWixNQUFnQyxFQUNoQyxJQUFJLEdBQUcsS0FBSztRQUVaLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUF3QjtZQUNqQyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSTtZQUNKLElBQUk7WUFDSixNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3BDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDdkMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0Exb0JVLGdCQUFnQiwwQ0FvQ2pCLHVCQUF1QixhQUN2QixXQUFXO21IQXJDVixnQkFBZ0IsY0FESCxNQUFNOzs0RkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBcUM3QixNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBQzlCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW5hbHl0aWNzIFNlcnZpY2UgKEZpcmViYXNlIEdBNClcbiAqXG4gKiBTZXJ2aWNpbyBwYXJhIHRyYWNraW5nIGRlIGV2ZW50b3MsIHBhZ2Ugdmlld3MgeSBlcnJvcmVzIGNvbiBGaXJlYmFzZSBBbmFseXRpY3MuXG4gKiBJbnRlZ3JhIGNvbiBlbCBzaXN0ZW1hIGRlIGF1dGggcGFyYSB1c2VyIHByb3BlcnRpZXMgeSByZXNwZXRhIGNvbnNlbnQgbW9kZSBHRFBSLlxuICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFBMQVRGT1JNX0lELCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBbmFseXRpY3MsIGxvZ0V2ZW50LCBzZXRVc2VySWQsIHNldFVzZXJQcm9wZXJ0aWVzIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hbmFseXRpY3MnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgQW5hbHl0aWNzQ29uZmlnLFxuICBBbmFseXRpY3NEZWJ1Z0V2ZW50LFxuICBBbmFseXRpY3NFdmVudE5hbWUsXG4gIEFuYWx5dGljc0V2ZW50UGFyYW1zLFxuICBBbmFseXRpY3NJdGVtLFxuICBDb25zZW50U2V0dGluZ3MsXG4gIENvbnNlbnRTdGF0ZSxcbiAgRGVidWdFdmVudFR5cGUsXG4gIFRpbWluZ01ldHJpYyxcbiAgVXNlclByb3BlcnRpZXMsXG59IGZyb20gJy4vYW5hbHl0aWNzLXR5cGVzJztcblxuLyoqIEtleSBwb3IgZGVmZWN0byBwYXJhIHBlcnNpc3RpciBjb25zZW50IGVuIGxvY2FsU3RvcmFnZSAqL1xuY29uc3QgREVGQVVMVF9DT05TRU5UX1NUT1JBR0VfS0VZID0gJ2FuYWx5dGljc19jb25zZW50JztcblxuLyoqIE3DoXhpbW8gZGUgZXZlbnRvcyBlbiBoaXN0b3JpYWwgZGUgZGVidWcgKi9cbmNvbnN0IE1BWF9ERUJVR19ISVNUT1JZID0gMTAwO1xuXG4vKipcbiAqIFNlcnZpY2lvIGRlIEZpcmViYXNlIEFuYWx5dGljcyAoR0E0KS5cbiAqXG4gKiBQcm9wb3JjaW9uYSB0cmFja2luZyBkZSBldmVudG9zLCBwYWdlIHZpZXdzLCBlcnJvcmVzIHkgbcOpdHJpY2FzIGRlIHBlcmZvcm1hbmNlLlxuICogU29wb3J0YSBHRFBSIENvbnNlbnQgTW9kZSB5IG1vZG8gZGVidWcgcGFyYSBkZXNhcnJvbGxvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIFByb2R1Y3RDb21wb25lbnQge1xuICogICBwcml2YXRlIGFuYWx5dGljcyA9IGluamVjdChBbmFseXRpY3NTZXJ2aWNlKTtcbiAqXG4gKiAgIG9uUHVyY2hhc2UocHJvZHVjdDogUHJvZHVjdCkge1xuICogICAgIHRoaXMuYW5hbHl0aWNzLmxvZ0V2ZW50KCdwdXJjaGFzZScsIHtcbiAqICAgICAgIHRyYW5zYWN0aW9uX2lkOiBvcmRlci5pZCxcbiAqICAgICAgIHZhbHVlOiBvcmRlci50b3RhbCxcbiAqICAgICAgIGN1cnJlbmN5OiAnRVVSJ1xuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBbmFseXRpY3NTZXJ2aWNlIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTVEFETyAoU2lnbmFscylcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY29uc2VudFN0YXRlID0gc2lnbmFsPENvbnNlbnRTdGF0ZT4oe1xuICAgIHNldHRpbmdzOiB7fSxcbiAgICB1cGRhdGVkQXQ6IG51bGwsXG4gICAgaGFzRGVjaWRlZDogZmFsc2UsXG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRGVidWdNb2RlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWdIaXN0b3J5ID0gc2lnbmFsPEFuYWx5dGljc0RlYnVnRXZlbnRbXT4oW10pO1xuXG4gIC8qKiBFc3RhZG8gZGUgY29uc2VudGltaWVudG8gYWN0dWFsIChyZWFkb25seSkgKi9cbiAgcmVhZG9ubHkgY29uc2VudFN0YXRlID0gdGhpcy5fY29uc2VudFN0YXRlLmFzUmVhZG9ubHkoKTtcblxuICAvKiogSW5kaWNhIHNpIGVzdMOhIGVuIG1vZG8gZGVidWcgKi9cbiAgcmVhZG9ubHkgaXNEZWJ1Z01vZGUgPSB0aGlzLl9pc0RlYnVnTW9kZS5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqIEluZGljYSBzaSBhbmFseXRpY3MgZXN0w6EgaGFiaWxpdGFkbyB5IGZ1bmNpb25hbmRvICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5pc0FuYWx5dGljc1N1cHBvcnRlZCgpICYmIHRoaXMuX2NvbnNlbnRTdGF0ZSgpLnNldHRpbmdzLmFuYWx5dGljcyA9PT0gdHJ1ZTtcbiAgfSk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPTkZJR1VSQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYW5hbHl0aWNzQ29uZmlnOiBBbmFseXRpY3NDb25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc2VudFN0b3JhZ2VLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFByZWZpeDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsaW5nUmF0ZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcbiAgKSB7XG4gICAgdGhpcy5hbmFseXRpY3NDb25maWcgPSBjb25maWcuYW5hbHl0aWNzQ29uZmlnID8/IHt9O1xuICAgIHRoaXMuY29uc2VudFN0b3JhZ2VLZXkgPVxuICAgICAgdGhpcy5hbmFseXRpY3NDb25maWcuY29uc2VudFN0b3JhZ2VLZXkgPz8gREVGQVVMVF9DT05TRU5UX1NUT1JBR0VfS0VZO1xuICAgIHRoaXMuZXZlbnRQcmVmaXggPSB0aGlzLmFuYWx5dGljc0NvbmZpZy5ldmVudFByZWZpeCA/PyAnJztcbiAgICB0aGlzLnNhbXBsaW5nUmF0ZSA9IHRoaXMuYW5hbHl0aWNzQ29uZmlnLnNhbXBsaW5nUmF0ZSA/PyAxLjA7XG5cbiAgICB0aGlzLmluaXRpYWxpemVBbmFseXRpY3MoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgYW5hbHl0aWNzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVBbmFseXRpY3MoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2FyZ2FyIGNvbnNlbnQgZGVzZGUgbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkQ29uc2VudEZyb21TdG9yYWdlKCk7XG5cbiAgICAvLyBDb25maWd1cmFyIGRlYnVnIG1vZGVcbiAgICBjb25zdCBkZWJ1Z01vZGUgPSB0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWJ1Z01vZGUgPz8gZmFsc2U7XG4gICAgdGhpcy5faXNEZWJ1Z01vZGUuc2V0KGRlYnVnTW9kZSk7XG5cbiAgICAvLyBBcGxpY2FyIGNvbnNlbnQgaW5pY2lhbCBhIGd0YWdcbiAgICB0aGlzLmFwcGx5Q29uc2VudFRvR3RhZyh0aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncyk7XG5cbiAgICAvLyBTZXRlYXIgdXNlciBwcm9wZXJ0aWVzIHBvciBkZWZlY3RvXG4gICAgaWYgKHRoaXMuYW5hbHl0aWNzQ29uZmlnLmRlZmF1bHRVc2VyUHJvcGVydGllcykge1xuICAgICAgdGhpcy5zZXRVc2VyUHJvcGVydGllcyh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0VXNlclByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGlmIChkZWJ1Z01vZGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbQW5hbHl0aWNzXSBJbmljaWFsaXphZG8gZW4gbW9kbyBkZWJ1ZyAtIGV2ZW50b3Mgc2UgbG9ndWVhbiBlbiBjb25zb2xhIFkgc2UgZW52w61hbiBhIEZpcmViYXNlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgaW5zdGFuY2lhIGRlIEFuYWx5dGljcyBkZSBmb3JtYSBwZXJlem9zYS5cbiAgICogRXN0byBldml0YSBlbCBlcnJvciBkZSBBUFBfSU5JVElBTElaRVIgZGUgQW5ndWxhckZpcmUuXG4gICAqL1xuICBwcml2YXRlIGdldEFuYWx5dGljc0luc3RhbmNlKCk6IEFuYWx5dGljcyB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlQW5hbHl0aWNzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KEFuYWx5dGljcywgbnVsbCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgQW5hbHl0aWNzIGVzdMOhIHNvcG9ydGFkb1xuICAgKi9cbiAgcHJpdmF0ZSBpc0FuYWx5dGljc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZUFuYWx5dGljcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuZmlyZWJhc2UubWVhc3VyZW1lbnRJZCkge1xuICAgICAgY29uc29sZS53YXJuKCdbQW5hbHl0aWNzXSBtZWFzdXJlbWVudElkIG5vIGNvbmZpZ3VyYWRvIGVuIGZpcmViYXNlIGNvbmZpZycpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGRlYmUgZW52aWFyIGVsIGV2ZW50byAoc2FtcGxpbmcpXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFNhbXBsZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zYW1wbGluZ1JhdGUgPj0gMS4wKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgPCB0aGlzLnNhbXBsaW5nUmF0ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQQUdFIFZJRVdTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBwYWdlIHZpZXcuXG4gICAqIE5vcm1hbG1lbnRlIHNlIHVzYSBhdXRvbcOhdGljYW1lbnRlIHZpYSBBbmFseXRpY3NSb3V0ZXJUcmFja2VyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFnZVBhdGggLSBSdXRhIGRlIGxhIHDDoWdpbmEgKGVqOiAnL3Byb2R1Y3RzLzEyMycpXG4gICAqIEBwYXJhbSBwYWdlVGl0bGUgLSBUw610dWxvIGRlIGxhIHDDoWdpbmEgKG9wY2lvbmFsKVxuICAgKi9cbiAgbG9nUGFnZVZpZXcocGFnZVBhdGg6IHN0cmluZywgcGFnZVRpdGxlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgncGFnZV92aWV3Jywge1xuICAgICAgcGFnZV9wYXRoOiBwYWdlUGF0aCxcbiAgICAgIHBhZ2VfdGl0bGU6IHBhZ2VUaXRsZSA/PyBkb2N1bWVudD8udGl0bGUsXG4gICAgICBwYWdlX2xvY2F0aW9uOiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIHNjcmVlbiB2aWV3IChwYXJhIGFwcHMgdGlwbyBTUEEpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NyZWVuTmFtZSAtIE5vbWJyZSBkZWwgc2NyZWVuXG4gICAqIEBwYXJhbSBzY3JlZW5DbGFzcyAtIENsYXNlIGRlbCBzY3JlZW4gKG9wY2lvbmFsKVxuICAgKi9cbiAgbG9nU2NyZWVuVmlldyhzY3JlZW5OYW1lOiBzdHJpbmcsIHNjcmVlbkNsYXNzPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgnc2NyZWVuX3ZpZXcnLCB7XG4gICAgICBzY3JlZW5fbmFtZTogc2NyZWVuTmFtZSxcbiAgICAgIHNjcmVlbl9jbGFzczogc2NyZWVuQ2xhc3MsXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVZFTlRPU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gZXZlbnRvIHRpcGFkbyBHQTQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBOb21icmUgZGVsIGV2ZW50byAodGlwYWRvKVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyw6FtZXRyb3MgZGVsIGV2ZW50byAodGlwYWRvcyBzZWfDum4gZWwgbm9tYnJlKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEV2ZW50byB0aXBhZG8gY29uIGF1dG9jb21wbGV0YWRvXG4gICAqIGFuYWx5dGljcy5sb2dFdmVudCgnYWRkX3RvX2NhcnQnLCB7XG4gICAqICAgaXRlbV9pZDogJzEyMycsXG4gICAqICAgaXRlbV9uYW1lOiAnUHJvZHVjdG8nLFxuICAgKiAgIHZhbHVlOiA5OS45OSxcbiAgICogICBjdXJyZW5jeTogJ0VVUidcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgbG9nRXZlbnQ8VCBleHRlbmRzIEFuYWx5dGljc0V2ZW50TmFtZT4oXG4gICAgZXZlbnROYW1lOiBULFxuICAgIHBhcmFtcz86IEFuYWx5dGljc0V2ZW50UGFyYW1zW1RdXG4gICk6IHZvaWQge1xuICAgIHRoaXMudHJhY2tFdmVudChldmVudE5hbWUsIHBhcmFtcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gZXZlbnRvIGN1c3RvbSBjb24gcGFyw6FtZXRyb3MgbGlicmVzLlxuICAgKiBVc2FyIGN1YW5kbyBlbCBldmVudG8gbm8gZXN0w6EgZW4gZWwgY2F0w6Fsb2dvIHRpcGFkby5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50TmFtZSAtIE5vbWJyZSBkZWwgZXZlbnRvIGN1c3RvbVxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUGFyw6FtZXRyb3MgbGlicmVzXG4gICAqL1xuICBsb2dDdXN0b21FdmVudChldmVudE5hbWU6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBjb25zdCBwcmVmaXhlZE5hbWUgPSB0aGlzLmV2ZW50UHJlZml4ICsgZXZlbnROYW1lO1xuICAgIHRoaXMudHJhY2tFdmVudChwcmVmaXhlZE5hbWUsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTMOzZ2ljYSBjb23Dum4gcGFyYSBlbnZpYXIgZXZlbnRvc1xuICAgKi9cbiAgcHJpdmF0ZSB0cmFja0V2ZW50KGV2ZW50TmFtZTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIC8vIFZlcmlmaWNhciBjb25zZW50XG4gICAgaWYgKCF0aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncy5hbmFseXRpY3MpIHtcbiAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ2V2ZW50JywgZXZlbnROYW1lLCBwYXJhbXMsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBcGxpY2FyIHNhbXBsaW5nXG4gICAgaWYgKCF0aGlzLnNob3VsZFNhbXBsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRGVidWcgbW9kZTogbG9ndWVhciBlbiBjb25zb2xhIChwZXJvIHNlZ3VpciBlbnZpYW5kbyBhIEZpcmViYXNlKVxuICAgIGlmICh0aGlzLl9pc0RlYnVnTW9kZSgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0FuYWx5dGljc10gRXZlbnQ6ICR7ZXZlbnROYW1lfWAsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gRW52aWFyIGEgRmlyZWJhc2VcbiAgICBjb25zdCBhbmFseXRpY3MgPSB0aGlzLmdldEFuYWx5dGljc0luc3RhbmNlKCk7XG4gICAgaWYgKGFuYWx5dGljcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nRXZlbnQoYW5hbHl0aWNzLCBldmVudE5hbWUgYXMgc3RyaW5nLCBwYXJhbXMpO1xuICAgICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCdldmVudCcsIGV2ZW50TmFtZSwgcGFyYW1zLCB0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBbmFseXRpY3NdIEVycm9yIGVudmlhbmRvIGV2ZW50bzonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ2V2ZW50JywgZXZlbnROYW1lLCBwYXJhbXMsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnZXZlbnQnLCBldmVudE5hbWUsIHBhcmFtcywgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFQ09NTUVSQ0VcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHZpc3RhIGRlIGl0ZW1cbiAgICovXG4gIGxvZ1ZpZXdJdGVtKGl0ZW06IEFuYWx5dGljc0l0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCd2aWV3X2l0ZW0nLCB7XG4gICAgICBpdGVtX2lkOiBpdGVtLml0ZW1faWQsXG4gICAgICBpdGVtX25hbWU6IGl0ZW0uaXRlbV9uYW1lLFxuICAgICAgdmFsdWU6IGl0ZW0ucHJpY2UsXG4gICAgICBjdXJyZW5jeTogaXRlbS5jdXJyZW5jeSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBhZ3JlZ2FyIGFsIGNhcnJpdG9cbiAgICovXG4gIGxvZ0FkZFRvQ2FydChpdGVtOiBBbmFseXRpY3NJdGVtLCBxdWFudGl0eSA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdhZGRfdG9fY2FydCcsIHtcbiAgICAgIGl0ZW1faWQ6IGl0ZW0uaXRlbV9pZCxcbiAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICB2YWx1ZTogKGl0ZW0ucHJpY2UgPz8gMCkgKiBxdWFudGl0eSxcbiAgICAgIGN1cnJlbmN5OiBpdGVtLmN1cnJlbmN5LFxuICAgICAgcXVhbnRpdHksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgaW5pY2lvIGRlIGNoZWNrb3V0XG4gICAqL1xuICBsb2dCZWdpbkNoZWNrb3V0KGl0ZW1zOiBBbmFseXRpY3NJdGVtW10sIHZhbHVlOiBudW1iZXIsIGN1cnJlbmN5ID0gJ0VVUicpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ0V2ZW50KCdiZWdpbl9jaGVja291dCcsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgY3VycmVuY3ksXG4gICAgICBpdGVtcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBjb21wcmEgY29tcGxldGFkYVxuICAgKi9cbiAgbG9nUHVyY2hhc2UoXG4gICAgdHJhbnNhY3Rpb25JZDogc3RyaW5nLFxuICAgIGl0ZW1zOiBBbmFseXRpY3NJdGVtW10sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBjdXJyZW5jeSA9ICdFVVInXG4gICk6IHZvaWQge1xuICAgIHRoaXMubG9nRXZlbnQoJ3B1cmNoYXNlJywge1xuICAgICAgdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGN1cnJlbmN5LFxuICAgICAgaXRlbXMsXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVVNFUiBQUk9QRVJUSUVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTZXRlYSBlbCB1c2VySWQgcGFyYSBhc29jaWFyIGV2ZW50b3MgY29uIGVsIHVzdWFyaW8uXG4gICAqIExsYW1hZG8gYXV0b23DoXRpY2FtZW50ZSBzaSBlbmFibGVBdXRoSW50ZWdyYXRpb249dHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJJZCAtIElEIGRlbCB1c3VhcmlvIG8gbnVsbCBwYXJhIGxpbXBpYXJcbiAgICovXG4gIHNldFVzZXJJZCh1c2VySWQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlYnVnIG1vZGU6IGxvZ3VlYXIgZW4gY29uc29sYSAocGVybyBzZWd1aXIgZW52aWFuZG8gYSBGaXJlYmFzZSlcbiAgICBpZiAodGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgY29uc29sZS5sb2coYFtBbmFseXRpY3NdIFNldCB1c2VySWQ6ICR7dXNlcklkfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFuYWx5dGljcyA9IHRoaXMuZ2V0QW5hbHl0aWNzSW5zdGFuY2UoKTtcbiAgICBpZiAoYW5hbHl0aWNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRVc2VySWQoYW5hbHl0aWNzLCB1c2VySWQpO1xuICAgICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3VzZXJfaWQnLCB7IHVzZXJJZCB9LCB0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBbmFseXRpY3NdIEVycm9yIHNldGVhbmRvIHVzZXJJZDonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ3VzZXJfcHJvcGVydHknLCAndXNlcl9pZCcsIHsgdXNlcklkIH0sIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgndXNlcl9wcm9wZXJ0eScsICd1c2VyX2lkJywgeyB1c2VySWQgfSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRlYSBwcm9waWVkYWRlcyBkZWwgdXN1YXJpbyBwYXJhIHNlZ21lbnRhY2nDs24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gUHJvcGllZGFkZXMga2V5LXZhbHVlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYW5hbHl0aWNzLnNldFVzZXJQcm9wZXJ0aWVzKHtcbiAgICogICBzdWJzY3JpcHRpb25fdGllcjogJ3ByZW1pdW0nLFxuICAgKiAgIHByZWZlcnJlZF9sYW5ndWFnZTogJ2VzJ1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBzZXRVc2VyUHJvcGVydGllcyhwcm9wZXJ0aWVzOiBVc2VyUHJvcGVydGllcyB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQW5hbHl0aWNzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEZWJ1ZyBtb2RlOiBsb2d1ZWFyIGVuIGNvbnNvbGEgKHBlcm8gc2VndWlyIGVudmlhbmRvIGEgRmlyZWJhc2UpXG4gICAgaWYgKHRoaXMuX2lzRGVidWdNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbQW5hbHl0aWNzXSBTZXQgdXNlciBwcm9wZXJ0aWVzOicsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFuYWx5dGljcyA9IHRoaXMuZ2V0QW5hbHl0aWNzSW5zdGFuY2UoKTtcbiAgICBpZiAoYW5hbHl0aWNzKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDb252ZXJ0aXIgYSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHBhcmEgRmlyZWJhc2VcbiAgICAgICAgY29uc3Qgc3RyaW5nUHJvcHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykpIHtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RyaW5nUHJvcHNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFVzZXJQcm9wZXJ0aWVzKGFuYWx5dGljcywgc3RyaW5nUHJvcHMpO1xuICAgICAgICB0aGlzLmFkZFRvRGVidWdIaXN0b3J5KCd1c2VyX3Byb3BlcnR5JywgJ3Byb3BlcnRpZXMnLCBwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tBbmFseXRpY3NdIEVycm9yIHNldGVhbmRvIHVzZXIgcHJvcGVydGllczonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuYWRkVG9EZWJ1Z0hpc3RvcnkoJ3VzZXJfcHJvcGVydHknLCAncHJvcGVydGllcycsIHByb3BlcnRpZXMsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgndXNlcl9wcm9wZXJ0eScsICdwcm9wZXJ0aWVzJywgcHJvcGVydGllcywgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRlYSBsYSBvcmdhbml6YWNpw7NuIGFjdGl2YSAobXVsdGktdGVuYW50KS5cbiAgICogTGxhbWFkbyBhdXRvbcOhdGljYW1lbnRlIHNpIGVuYWJsZUF1dGhJbnRlZ3JhdGlvbj10cnVlLlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgLSBJRCBkZSBsYSBvcmdhbml6YWNpw7NuIG8gbnVsbFxuICAgKi9cbiAgc2V0QWN0aXZlT3JnYW5pemF0aW9uKG9yZ0lkOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKG9yZ0lkKSB7XG4gICAgICB0aGlzLnNldFVzZXJQcm9wZXJ0aWVzKHsgYWN0aXZlX29yZ2FuaXphdGlvbjogb3JnSWQgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVSUk9SIFRSQUNLSU5HXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSB1biBlcnJvciBwYXJhIHRyYWNraW5nLlxuICAgKiBJbnRlZ3JhIGF1dG9tw6F0aWNhbWVudGUgY29uIEFuZ3VsYXIgRXJyb3JIYW5kbGVyIHNpIGVuYWJsZUVycm9yVHJhY2tpbmc9dHJ1ZS5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gRXJyb3IgbyBtZW5zYWplIGRlIGVycm9yXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gQ29udGV4dG8gYWRpY2lvbmFsXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdHJ5IHtcbiAgICogICBhd2FpdCByaXNreU9wZXJhdGlvbigpO1xuICAgKiB9IGNhdGNoIChlcnJvcikge1xuICAgKiAgIGFuYWx5dGljcy5sb2dFcnJvcihlcnJvciwgeyBjb250ZXh0OiAnY2hlY2tvdXRfZmxvdycgfSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBsb2dFcnJvcihlcnJvcjogRXJyb3IgfCBzdHJpbmcsIGNvbnRleHQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBlcnJvcjtcbiAgICBjb25zdCBlcnJvclN0YWNrID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVycm9yVHlwZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5uYW1lIDogJ0Vycm9yJztcblxuICAgIHRoaXMubG9nRXZlbnQoJ2Vycm9yX29jY3VycmVkJywge1xuICAgICAgZXJyb3JfdHlwZTogZXJyb3JUeXBlLFxuICAgICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLnN1YnN0cmluZygwLCAxMDApLCAvLyBMaW1pdGFyIGxvbmdpdHVkXG4gICAgICBlcnJvcl9zdGFjazogZXJyb3JTdGFjaz8uc3Vic3RyaW5nKDAsIDUwMCksXG4gICAgICBjb250ZXh0OiBjb250ZXh0ID8gSlNPTi5zdHJpbmdpZnkoY29udGV4dCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW4gZXJyb3IgZmF0YWwgKGNyYXNoLWxldmVsKS5cbiAgICovXG4gIGxvZ0ZhdGFsRXJyb3IoZXJyb3I6IEVycm9yLCBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMubG9nRXJyb3IoZXJyb3IsIHsgLi4uY29udGV4dCwgc2V2ZXJpdHk6ICdmYXRhbCcgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQ09OU0VOVCBNT0RFIChHRFBSKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGVzdGFkbyBkZSBjb25zZW50aW1pZW50byBkZWwgdXN1YXJpby5cbiAgICogQWZlY3RhIHF1w6kgZGF0b3Mgc2UgcmVjb2xlY3RhbiB5IGVudsOtYW4uXG4gICAqXG4gICAqIEBwYXJhbSBjb25zZW50IC0gU2V0dGluZ3MgZGUgY29uc2VudGltaWVudG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBVc3VhcmlvIGFjZXB0YSB0b2RvXG4gICAqIGFuYWx5dGljcy51cGRhdGVDb25zZW50KHsgYW5hbHl0aWNzOiB0cnVlLCBhZHZlcnRpc2luZzogdHJ1ZSB9KTtcbiAgICpcbiAgICogLy8gVXN1YXJpbyByZWNoYXphIHB1YmxpY2lkYWRcbiAgICogYW5hbHl0aWNzLnVwZGF0ZUNvbnNlbnQoeyBhbmFseXRpY3M6IHRydWUsIGFkdmVydGlzaW5nOiBmYWxzZSB9KTtcbiAgICogYGBgXG4gICAqL1xuICB1cGRhdGVDb25zZW50KGNvbnNlbnQ6IENvbnNlbnRTZXR0aW5ncyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1N0YXRlOiBDb25zZW50U3RhdGUgPSB7XG4gICAgICBzZXR0aW5nczogeyAuLi50aGlzLl9jb25zZW50U3RhdGUoKS5zZXR0aW5ncywgLi4uY29uc2VudCB9LFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgaGFzRGVjaWRlZDogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5fY29uc2VudFN0YXRlLnNldChuZXdTdGF0ZSk7XG4gICAgdGhpcy5zYXZlQ29uc2VudFRvU3RvcmFnZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5hcHBseUNvbnNlbnRUb0d0YWcobmV3U3RhdGUuc2V0dGluZ3MpO1xuXG4gICAgdGhpcy5hZGRUb0RlYnVnSGlzdG9yeSgnY29uc2VudCcsICd1cGRhdGUnLCBjb25zZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZW5pZWdhIHRvZG8gY29uc2VudGltaWVudG8uXG4gICAqL1xuICBkZW55QWxsQ29uc2VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbnNlbnQoe1xuICAgICAgYW5hbHl0aWNzOiBmYWxzZSxcbiAgICAgIGFkdmVydGlzaW5nOiBmYWxzZSxcbiAgICAgIGZ1bmN0aW9uYWxpdHk6IGZhbHNlLFxuICAgICAgc2VjdXJpdHk6IHRydWUsIC8vIFNpZW1wcmUgcGVybWl0aWRvXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNlcHRhIHRvZG8gY29uc2VudGltaWVudG8uXG4gICAqL1xuICBncmFudEFsbENvbnNlbnQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb25zZW50KHtcbiAgICAgIGFuYWx5dGljczogdHJ1ZSxcbiAgICAgIGFkdmVydGlzaW5nOiB0cnVlLFxuICAgICAgZnVuY3Rpb25hbGl0eTogdHJ1ZSxcbiAgICAgIHNlY3VyaXR5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgZXN0YWRvIGFjdHVhbCBkZSBjb25zZW50aW1pZW50by5cbiAgICovXG4gIGdldENvbnNlbnRTdGF0ZSgpOiBDb25zZW50U3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9jb25zZW50U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgY29uc2VudCBzZXR0aW5ncyBhIGd0YWcgKEdBNCBDb25zZW50IE1vZGUgdjIpXG4gICAqL1xuICBwcml2YXRlIGFwcGx5Q29uc2VudFRvR3RhZyhzZXR0aW5nczogQ29uc2VudFNldHRpbmdzKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ3RhZyA9ICh3aW5kb3cgYXMgYW55KS5ndGFnO1xuICAgIGlmICh0eXBlb2YgZ3RhZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBndGFnKCdjb25zZW50JywgJ3VwZGF0ZScsIHtcbiAgICAgICAgYW5hbHl0aWNzX3N0b3JhZ2U6IHNldHRpbmdzLmFuYWx5dGljcyA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBhZF9zdG9yYWdlOiBzZXR0aW5ncy5hZHZlcnRpc2luZyA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgICBhZF91c2VyX2RhdGE6IHNldHRpbmdzLmFkdmVydGlzaW5nID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgIGFkX3BlcnNvbmFsaXphdGlvbjogc2V0dGluZ3MuYWR2ZXJ0aXNpbmcgPyAnZ3JhbnRlZCcgOiAnZGVuaWVkJyxcbiAgICAgICAgZnVuY3Rpb25hbGl0eV9zdG9yYWdlOiBzZXR0aW5ncy5mdW5jdGlvbmFsaXR5ID8gJ2dyYW50ZWQnIDogJ2RlbmllZCcsXG4gICAgICAgIHNlY3VyaXR5X3N0b3JhZ2U6IHNldHRpbmdzLnNlY3VyaXR5ICE9PSBmYWxzZSA/ICdncmFudGVkJyA6ICdkZW5pZWQnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FuYWx5dGljc10gRXJyb3IgYXBsaWNhbmRvIGNvbnNlbnQgYSBndGFnOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FyZ2EgY29uc2VudCBkZXNkZSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgbG9hZENvbnNlbnRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5jb25zZW50U3RvcmFnZUtleSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RvcmVkKSBhcyBDb25zZW50U3RhdGU7XG4gICAgICAgIHRoaXMuX2NvbnNlbnRTdGF0ZS5zZXQoe1xuICAgICAgICAgIC4uLnBhcnNlZCxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHBhcnNlZC51cGRhdGVkQXQgPyBuZXcgRGF0ZShwYXJzZWQudXBkYXRlZEF0KSA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmFuYWx5dGljc0NvbmZpZy5kZWZhdWx0Q29uc2VudEdyYW50ZWQpIHtcbiAgICAgICAgLy8gQXV0by1ncmFudCBhbGwgY29uc2VudCBwYXJhIGRlc2Fycm9sbG8vdGVzdGluZ1xuICAgICAgICB0aGlzLl9jb25zZW50U3RhdGUuc2V0KHtcbiAgICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgICAgYW5hbHl0aWNzOiB0cnVlLFxuICAgICAgICAgICAgYWR2ZXJ0aXNpbmc6IHRydWUsXG4gICAgICAgICAgICBmdW5jdGlvbmFsaXR5OiB0cnVlLFxuICAgICAgICAgICAgc2VjdXJpdHk6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgaGFzRGVjaWRlZDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuYW5hbHl0aWNzQ29uZmlnLmRlZmF1bHRDb25zZW50KSB7XG4gICAgICAgIC8vIEFwbGljYXIgY29uc2VudCBwb3IgZGVmZWN0byBzaSBubyBoYXkgZ3VhcmRhZG9cbiAgICAgICAgdGhpcy5fY29uc2VudFN0YXRlLnNldCh7XG4gICAgICAgICAgc2V0dGluZ3M6IHRoaXMuYW5hbHl0aWNzQ29uZmlnLmRlZmF1bHRDb25zZW50LFxuICAgICAgICAgIHVwZGF0ZWRBdDogbnVsbCxcbiAgICAgICAgICBoYXNEZWNpZGVkOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FuYWx5dGljc10gRXJyb3IgY2FyZ2FuZG8gY29uc2VudDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEd1YXJkYSBjb25zZW50IGVuIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBzYXZlQ29uc2VudFRvU3RvcmFnZShzdGF0ZTogQ29uc2VudFN0YXRlKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29uc2VudFN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FuYWx5dGljc10gRXJyb3IgZ3VhcmRhbmRvIGNvbnNlbnQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUSU1JTkcgLyBQRVJGT1JNQU5DRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogUmVnaXN0cmEgdW5hIG3DqXRyaWNhIGRlIHRpbWluZy9wZXJmb3JtYW5jZS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBOb21icmUgZGUgbGEgbcOpdHJpY2FcbiAgICogQHBhcmFtIHZhbHVlTXMgLSBWYWxvciBlbiBtaWxpc2VndW5kb3NcbiAgICogQHBhcmFtIHBhcmFtcyAtIFBhcsOhbWV0cm9zIGFkaWNpb25hbGVzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICogYXdhaXQgbG9hZERhdGEoKTtcbiAgICogYW5hbHl0aWNzLmxvZ1RpbWluZygnZGF0YV9sb2FkJywgcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydCwge1xuICAgKiAgIGNhdGVnb3J5OiAnYXBpJyxcbiAgICogICBlbmRwb2ludDogJy9wcm9kdWN0cydcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgbG9nVGltaW5nKG5hbWU6IHN0cmluZywgdmFsdWVNczogbnVtYmVyLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5sb2dFdmVudCgncGVyZm9ybWFuY2VfbWV0cmljJywge1xuICAgICAgbWV0cmljX25hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogTWF0aC5yb3VuZCh2YWx1ZU1zKSxcbiAgICAgIHVuaXQ6ICdtcycsXG4gICAgICAuLi5wYXJhbXMsXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gREVCVUdcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEhhYmlsaXRhL2Rlc2hhYmlsaXRhIG1vZG8gZGVidWcuXG4gICAqIEVuIGRlYnVnOiBsb2dlYSBldmVudG9zIGEgY29uc29sYSBhZGVtw6FzIGRlIGVudmlhcmxvcyBhIEZpcmViYXNlLlxuICAgKi9cbiAgc2V0RGVidWdNb2RlKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9pc0RlYnVnTW9kZS5zZXQoZW5hYmxlZCk7XG4gICAgY29uc29sZS5sb2coYFtBbmFseXRpY3NdIERlYnVnIG1vZGU6ICR7ZW5hYmxlZCA/ICdPTicgOiAnT0ZGJ31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGhpc3RvcmlhbCBkZSBldmVudG9zIChzb2xvIGVuIGRlYnVnIG1vZGUpLlxuICAgKiDDmnRpbCBwYXJhIHRlc3RpbmcgeSBkZXNhcnJvbGxvLlxuICAgKi9cbiAgZ2V0RGVidWdIaXN0b3J5KCk6IEFuYWx5dGljc0RlYnVnRXZlbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYnVnSGlzdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSBoaXN0b3JpYWwgZGUgZGVidWcuXG4gICAqL1xuICBjbGVhckRlYnVnSGlzdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZWJ1Z0hpc3Rvcnkuc2V0KFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZ3JlZ2EgZXZlbnRvIGFsIGhpc3RvcmlhbCBkZSBkZWJ1Z1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRUb0RlYnVnSGlzdG9yeShcbiAgICB0eXBlOiBEZWJ1Z0V2ZW50VHlwZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgc2VudCA9IGZhbHNlXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNEZWJ1Z01vZGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50OiBBbmFseXRpY3NEZWJ1Z0V2ZW50ID0ge1xuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZSxcbiAgICAgIG5hbWUsXG4gICAgICBwYXJhbXMsXG4gICAgICBzZW50LFxuICAgIH07XG5cbiAgICB0aGlzLl9kZWJ1Z0hpc3RvcnkudXBkYXRlKChoaXN0b3J5KSA9PiB7XG4gICAgICBjb25zdCBuZXdIaXN0b3J5ID0gW2V2ZW50LCAuLi5oaXN0b3J5XTtcbiAgICAgIHJldHVybiBuZXdIaXN0b3J5LnNsaWNlKDAsIE1BWF9ERUJVR19ISVNUT1JZKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -21843,7 +21843,7 @@ class AnalyticsService {
21843
21843
  this.setUserProperties(this.analyticsConfig.defaultUserProperties);
21844
21844
  }
21845
21845
  if (debugMode) {
21846
- console.log('[Analytics] Inicializado en modo debug - eventos NO se envían a Firebase');
21846
+ console.log('[Analytics] Inicializado en modo debug - eventos se loguean en consola Y se envían a Firebase');
21847
21847
  }
21848
21848
  }
21849
21849
  /**
@@ -21962,11 +21962,9 @@ class AnalyticsService {
21962
21962
  if (!this.shouldSample()) {
21963
21963
  return;
21964
21964
  }
21965
- // Debug mode: solo log, no enviar
21965
+ // Debug mode: loguear en consola (pero seguir enviando a Firebase)
21966
21966
  if (this._isDebugMode()) {
21967
- this.addToDebugHistory('event', eventName, params, false);
21968
21967
  console.log(`[Analytics] Event: ${eventName}`, params);
21969
- return;
21970
21968
  }
21971
21969
  // Enviar a Firebase
21972
21970
  const analytics = this.getAnalyticsInstance();
@@ -21977,8 +21975,12 @@ class AnalyticsService {
21977
21975
  }
21978
21976
  catch (error) {
21979
21977
  console.error('[Analytics] Error enviando evento:', error);
21978
+ this.addToDebugHistory('event', eventName, params, false);
21980
21979
  }
21981
21980
  }
21981
+ else {
21982
+ this.addToDebugHistory('event', eventName, params, false);
21983
+ }
21982
21984
  }
21983
21985
  // ===========================================================================
21984
21986
  // ECOMMERCE
@@ -22040,20 +22042,24 @@ class AnalyticsService {
22040
22042
  if (!this.isAnalyticsSupported()) {
22041
22043
  return;
22042
22044
  }
22045
+ // Debug mode: loguear en consola (pero seguir enviando a Firebase)
22043
22046
  if (this._isDebugMode()) {
22044
22047
  console.log(`[Analytics] Set userId: ${userId}`);
22045
- this.addToDebugHistory('user_property', 'user_id', { userId }, false);
22046
- return;
22047
22048
  }
22048
22049
  const analytics = this.getAnalyticsInstance();
22049
22050
  if (analytics) {
22050
22051
  try {
22051
22052
  setUserId(analytics, userId);
22053
+ this.addToDebugHistory('user_property', 'user_id', { userId }, true);
22052
22054
  }
22053
22055
  catch (error) {
22054
22056
  console.error('[Analytics] Error seteando userId:', error);
22057
+ this.addToDebugHistory('user_property', 'user_id', { userId }, false);
22055
22058
  }
22056
22059
  }
22060
+ else {
22061
+ this.addToDebugHistory('user_property', 'user_id', { userId }, false);
22062
+ }
22057
22063
  }
22058
22064
  /**
22059
22065
  * Setea propiedades del usuario para segmentación.
@@ -22072,10 +22078,9 @@ class AnalyticsService {
22072
22078
  if (!this.isAnalyticsSupported()) {
22073
22079
  return;
22074
22080
  }
22081
+ // Debug mode: loguear en consola (pero seguir enviando a Firebase)
22075
22082
  if (this._isDebugMode()) {
22076
22083
  console.log('[Analytics] Set user properties:', properties);
22077
- this.addToDebugHistory('user_property', 'properties', properties, false);
22078
- return;
22079
22084
  }
22080
22085
  const analytics = this.getAnalyticsInstance();
22081
22086
  if (analytics) {
@@ -22088,11 +22093,16 @@ class AnalyticsService {
22088
22093
  }
22089
22094
  }
22090
22095
  setUserProperties(analytics, stringProps);
22096
+ this.addToDebugHistory('user_property', 'properties', properties, true);
22091
22097
  }
22092
22098
  catch (error) {
22093
22099
  console.error('[Analytics] Error seteando user properties:', error);
22100
+ this.addToDebugHistory('user_property', 'properties', properties, false);
22094
22101
  }
22095
22102
  }
22103
+ else {
22104
+ this.addToDebugHistory('user_property', 'properties', properties, false);
22105
+ }
22096
22106
  }
22097
22107
  /**
22098
22108
  * Setea la organización activa (multi-tenant).
@@ -22239,6 +22249,19 @@ class AnalyticsService {
22239
22249
  updatedAt: parsed.updatedAt ? new Date(parsed.updatedAt) : null,
22240
22250
  });
22241
22251
  }
22252
+ else if (this.analyticsConfig.defaultConsentGranted) {
22253
+ // Auto-grant all consent para desarrollo/testing
22254
+ this._consentState.set({
22255
+ settings: {
22256
+ analytics: true,
22257
+ advertising: true,
22258
+ functionality: true,
22259
+ security: true,
22260
+ },
22261
+ updatedAt: new Date(),
22262
+ hasDecided: true,
22263
+ });
22264
+ }
22242
22265
  else if (this.analyticsConfig.defaultConsent) {
22243
22266
  // Aplicar consent por defecto si no hay guardado
22244
22267
  this._consentState.set({
@@ -22299,7 +22322,7 @@ class AnalyticsService {
22299
22322
  // ===========================================================================
22300
22323
  /**
22301
22324
  * Habilita/deshabilita modo debug.
22302
- * En debug: logea a consola, no envía a Firebase.
22325
+ * En debug: logea eventos a consola además de enviarlos a Firebase.
22303
22326
  */
22304
22327
  setDebugMode(enabled) {
22305
22328
  this._isDebugMode.set(enabled);