@fireflysemantics/slice 14.0.21 → 15.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,6 +36,13 @@ export class AbstractStore {
36
36
  * store or slice delta state changes.
37
37
  */
38
38
  this.notifyDelta = new ReplaySubject(1);
39
+ /**
40
+ * An Observable<E[]> reference
41
+ * to the entities in the store or
42
+ * Slice instance.
43
+ *
44
+ */
45
+ this.obs = this.observe();
39
46
  this.config = config
40
47
  ? freeze(Object.assign(Object.assign({}, ESTORE_CONFIG_DEFAULT), config))
41
48
  : ESTORE_CONFIG_DEFAULT;
@@ -286,4 +293,4 @@ export class AbstractStore {
286
293
  this.notifyQuery.complete();
287
294
  }
288
295
  }
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NsaWNlL3NyYy9saWIvQWJzdHJhY3RTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUlwQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFBO0FBRXpCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFBO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFBO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFnQixNQUFNLENBQUM7SUFDdkQsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixPQUFPLEVBQUUsc0JBQXNCO0NBQ2hDLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBZ0IsYUFBYTtJQU9oQyxZQUFZLE1BQW9CO1FBTWpDOztXQUVHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNPLFdBQU0sR0FBVyxFQUFFLENBQUM7UUE0QzlCOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTFDOzs7V0FHRztRQUNJLGNBQVMsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUU1Qzs7O1dBR0c7UUFDTyxXQUFNLEdBQUcsSUFBSSxhQUFhLENBQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUM7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUMsQ0FBQTtRQTlFbkQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNO1lBQ2xCLENBQUMsQ0FBQyxNQUFNLGlDQUFNLHFCQUFxQixHQUFLLE1BQU0sRUFBRztZQUNqRCxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFD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QUMzRDtRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxXQUFXO1FBQ1QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxRQUFRLENBQUMsTUFBa0I7UUFDekIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDaEQ7UUFDRCxNQUFNLElBQUksR0FBaUIsTUFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLENBQUMsTUFBa0I7UUFDN0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDbEQ7UUFDRCxNQUFNLEVBQUUsR0FBaUIsTUFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxNQUFNLENBQUMsQ0FBZTtRQUNwQixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLENBQUMsRUFBTSxFQUFFLEVBQU07UUFDekIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFVBQVUsQ0FBQyxFQUFNLEVBQUUsRUFBTTtRQUN2QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCJcbmltcG9ydCB7IERlbHRhLCBQcmVkaWNhdGUgfSBmcm9tIFwiLi9tb2RlbHNcIlxuaW1wb3J0IHsgU3RvcmVDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvU3RvcmVDb25maWdcIlxuXG5jb25zdCB7IGZyZWV6ZSB9ID0gT2JqZWN0XG5cbmNvbnN0IEVTVE9SRV9ERUZBVUxUX0lEX0tFWSA9IFwiaWRcIlxuY29uc3QgRVNUT1JFX0RFRkFVTFRfR0lEX0tFWSA9IFwiZ2lkXCJcblxuZXhwb3J0IGNvbnN0IEVTVE9SRV9DT05GSUdfREVGQVVMVDogU3RvcmVDb25maWcgPSBmcmVlemUoe1xuICBpZEtleTogRVNUT1JFX0RFRkFVTFRfSURfS0VZLFxuICBndWlkS2V5OiBFU1RPUkVfREVGQVVMVF9HSURfS0VZXG59KTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3RvcmU8RT4ge1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHN0b3JlLlxuICAgKi9cbiAgIHB1YmxpYyBjb25maWc6IFN0b3JlQ29uZmlnO1xuXG4gICBjb25zdHJ1Y3Rvcihjb25maWc/OiBTdG9yZUNvbmZpZykge1xuICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ1xuICAgICAgID8gZnJlZXplKHsgLi4uRVNUT1JFX0NPTkZJR19ERUZBVUxULCAuLi5jb25maWcgfSlcbiAgICAgICA6IEVTVE9SRV9DT05GSUdfREVGQVVMVDtcbiAgIH1cbiBcbiAgLyoqXG4gICAqIE5vdGlmaWVzIG9ic2VydmVycyBvZiB0aGUgc3RvcmUgcXVlcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5UXVlcnkgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBxdWVyeSBzdGF0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBfcXVlcnk6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHF1ZXJ5IHN0YXRlIGFuZCBub3RpZmllcyBvYnNlcnZlcnMuXG4gICAqL1xuICBzZXQgcXVlcnkocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuX3F1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5ub3RpZnlRdWVyeS5uZXh0KHRoaXMuX3F1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIEEgc25hcHNob3Qgb2YgdGhlIHF1ZXJ5IHN0YXRlLlxuICAgKi9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZlIHRoZSBxdWVyeS5cbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICBsZXQgcXVlcnkkID0gc291cmNlLm9ic2VydmVRdWVyeSgpO1xuICAgIDwvcHJlPlxuICAqL1xuICBwdWJsaWMgb2JzZXJ2ZVF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLm5vdGlmeVF1ZXJ5LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgaWQga2V5IGZvciB0aGUgRVN0b3JlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHRoaXMuY29uZmlnLmlkS2V5O1xuICAgKi9cbiAgZ2V0IElEX0tFWSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5pZEtleVxuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBndWlkIGtleSBmb3IgdGhlIEVTdG9yZSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB0aGlzLmNvbmZpZy5ndWlkS2V5O1xuICAgKi9cbiAgZ2V0IEdVSURfS0VZKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmd1aWRLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmltYXJ5IGluZGV4IGZvciB0aGUgc3RvcmVzIGVsZW1lbnRzLlxuICAgKi9cbiAgcHVibGljIGVudHJpZXM6IE1hcDxzdHJpbmcsIEU+ID0gbmV3IE1hcCgpXG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IGVudHJpZXMgdGhhdCBhcmUga2V5ZWQgYnlcbiAgICogYW4gaWQgZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBwdWJsaWMgaWRFbnRyaWVzOiBNYXA8c3RyaW5nLCBFPiA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbm90aWZpY2F0aW9ucyB0aGF0IGJyb2FjYXN0XG4gICAqIHRoZSBlbnRpcmUgc2V0IG9mIGVudHJpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5ID0gbmV3IFJlcGxheVN1YmplY3Q8RVtdPigxKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbm90aWZpY2F0aW9ucyB0aGF0IGJyb2FjYXN0XG4gICAqIHN0b3JlIG9yIHNsaWNlIGRlbHRhIHN0YXRlIGNoYW5nZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5RGVsdGEgPSBuZXcgUmVwbGF5U3ViamVjdDxEZWx0YTxFPj4oMSlcblxuICAvKipcbiAgICogQ2FsbCBhbGwgdGhlIG5vdGlmaWVycyBhdCBvbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gdlxuICAgKiBAcGFyYW0gZGVsdGFcbiAgICovXG4gIHByb3RlY3RlZCBub3RpZnlBbGwodjogRVtdLCBkZWx0YTogRGVsdGE8RT4pIHtcbiAgICB0aGlzLm5vdGlmeS5uZXh0KHYpO1xuICAgIHRoaXMubm90aWZ5RGVsdGEubmV4dChkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSBzdG9yZSBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gc29ydCBPcHRpb25hbCBzb3J0aW5nIGZ1bmN0aW9uIHlpZWxkaW5nIGEgc29ydGVkIG9ic2VydmFibGUuXG4gICAqIEBleGFtcGxlXG5gYGBcbmxldCB0b2RvcyQgPSBzb3VyY2Uub2JzZXJ2ZSgpO1xuLy9vciB3aXRoIGEgc29ydCBieSB0aXRsZSBmdW5jdGlvblxubGV0IHRvZG9zJCA9IHNvdXJjZS5vYnNlcnZlKChhLCBiKT0+KGEudGl0bGUgPiBiLnRpdGxlID8gLTEgOiAxKSk7XG5gYGBcbiAgKi9cbiAgcHVibGljIG9ic2VydmUoc29ydD86IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyKTogT2JzZXJ2YWJsZTxFW10+IHtcbiAgICBpZiAoc29ydCkge1xuICAgICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUobWFwKChlOiBFW10pID0+IGUuc29ydChzb3J0KSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ub3RpZnkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSBkZWx0YSB1cGRhdGVzLlxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgICBsZXQgdG9kb3MkID0gc291cmNlLm9ic2VydmVEZWx0YSgpO1xuICAgICA8L3ByZT5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlRGVsdGEoKTogT2JzZXJ2YWJsZTxEZWx0YTxFPj4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmeURlbHRhLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQHJldHVybiBBIGhvdCB7QGxpbmsgT2JzZXJ2YWJsZX0gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgIDxwcmU+XG4gICAgc291cmNlLmlzRW1wdHkoKTtcbiAgICA8L3ByZT5cbiAgKi9cbiAgaXNFbXB0eSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnkucGlwZShcbiAgICAgIG1hcCgoZW50cmllczogRVtdKSA9PiBlbnRyaWVzLmxlbmd0aCA9PSAwKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqIFxuICAgKiBAcmV0dXJuIEEgc25hcHNob3QgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgIHNvdXJjZS5pc0VtcHR5KCk7XG4gICAgPC9wcmU+XG4gICovXG4gIGlzRW1wdHlTbmFwc2hvdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGNvbnRhaW5lZC5cbiAgICogQHBhcmFtIHAgVGhlIHByZWRpY2F0ZSB0byBhcHBseSBpbiBvcmRlciB0byBmaWx0ZXIgdGhlIGNvdW50XG4gICAqL1xuICBjb3VudChwPzogUHJlZGljYXRlPEU+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAocCkge1xuICAgICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUoXG4gICAgICAgIG1hcCgoZTogRVtdKSA9PiBlLnJlZHVjZSgodG90YWwsIGUpID0+IHRvdGFsICsgKHAoZSkgPyAxIDogMCksIDApKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUobWFwKChlbnRyaWVzOiBFW10pID0+IGVudHJpZXMubGVuZ3RoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb250YWluZWQgaW4gdGhlIHN0b3JlLlxuICAgKiBAcGFyYW0gcCBUaGUgcHJlZGljYXRlIHRvIGFwcGx5IGluIG9yZGVyIHRvIGZpbHRlciB0aGUgY291bnRcbiAgICovXG4gIGNvdW50U25hcHNob3QocD86IFByZWRpY2F0ZTxFPik6IG51bWJlciB7XG4gICAgaWYgKHApIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkuZmlsdGVyKHApLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgYWxsIGVudHJpZXMuXG4gICAqIFxuICAgKiBAcmV0dXJuIFNuYXBzaG90IGFycmF5IG9mIGFsbCB0aGUgZWxlbWVudHMgdGhlIGVudGl0aWVzIHRoZSBzdG9yZSBjb250YWlucy5cbiAgICogXG4gICAqIEBleGFtcGxlIE9ic2VydmUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGVudGl0aWVzIGluIHRoZSBzdG9yZS5cbmBgYFxubGV0IHNlbGVjdGVkVG9kb3M6VG9kb1tdID0gc291cmNlLmFsbFNuYXBzaG90KCk7XG5gYGBcbiAgICovXG4gIGFsbFNuYXBzaG90KCk6IEVbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVudHJpZXMgY29udGFpbiB0aGUgaWRlbnRpZmllZCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBwYXJhbSB0YXJnZXQgRWl0aGVyIGFuIGluc3RhbmNlIG9mIHR5cGUgYEVgIG9yIGEgYGd1aWRgIGlkZW50aWZ5aW5nIHRoZSBpbnN0YW5jZS4gXG4gICAqIEBwYXJhbSBieUlkIFdoZXRoZXIgdGhlIGxvb2t1cCBzaG91bGQgYmUgcGVyZm9ybWVkIHdpdGggdGhlIGBpZGAga2V5IHJhdGhlciB0aGFuIHRoZSBgZ3VpZGAuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbmNlIGlkZW50aWZpZWQgYnkgdGhlIGd1aWQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgICBsZXQgY29udGFpbnM6Ym9vbGVhbiA9IHNvdXJjZS5jb250YWlucyhndWlkKTtcbiAgICAgPC9wcmU+XG4gICAqL1xuICBjb250YWlucyh0YXJnZXQ6IEUgfCBzdHJpbmcpOmJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldCh0YXJnZXQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBndWlkOiBzdHJpbmcgPSAoPGFueT50YXJnZXQpW3RoaXMuY29uZmlnLmd1aWRLZXldO1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGd1aWQpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50cmllcyBjb250YWluIHRoZSBpZGVudGlmaWVkIGluc3RhbmNlLlxuICAgKiBcbiAgICogQHBhcmFtIHRhcmdldCBFaXRoZXIgYW4gaW5zdGFuY2Ugb2YgdHlwZSBgRWAgb3IgYSBgaWRgIGlkZW50aWZ5aW5nIHRoZSBpbnN0YW5jZS4gXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbmNlIGlkZW50aWZpZWQgYnkgdGhlIGBpZGAgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgICBsZXQgY29udGFpbnM6Ym9vbGVhbiA9IHNvdXJjZS5jb250YWlucyhndWlkKTtcbiAgICAgPC9wcmU+XG4gICAqL1xuICBjb250YWluc0J5SWQodGFyZ2V0OiBFIHwgc3RyaW5nKTpib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaWRFbnRyaWVzLmdldCh0YXJnZXQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpZDogc3RyaW5nID0gKDxhbnk+dGFyZ2V0KVt0aGlzLmNvbmZpZy5pZEtleV07XG4gICAgcmV0dXJuIHRoaXMuaWRFbnRyaWVzLmdldChpZCkgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbmQgcmV0dXJuIHRoZSBlbnRpdHkgaWRlbnRpZmllZCBieSB0aGUgR1VJRCBwYXJhbWV0ZXJcbiAgICogaWYgaXQgZXhpc3RzIGFuZCByZXR1cm4gaXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlkXG4gICAqIEByZXR1cm4gVGhlIGVudGl0eSBpbnN0YW5jZSBpZiBpdCBleGlzdHMsIG51bGwgb3RoZXJ3aXNlXG4gICAqL1xuICBmaW5kT25lKGd1aWQ6IHN0cmluZyk6IEUgfCB1bmRlZmluZWR7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoZ3VpZCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbmQgcmV0dXJuIHRoZSBlbnRpdHkgaWRlbnRpZmllZCBieSB0aGUgSUQgcGFyYW1ldGVyXG4gICAqIGlmIGl0IGV4aXN0cyBhbmQgcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHJldHVybiBUaGUgZW50aXR5IGluc3RhbmNlIGlmIGl0IGV4aXN0cywgbnVsbCBvdGhlcndpc2VcbiAgICovXG4gIGZpbmRPbmVCeUlEKGlkOiBzdHJpbmcpOiBFIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pZEVudHJpZXMuZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBvZiB0aGUgZW50cmllcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBwIFRoZSBwcmVkaWNhdGUgdXNlZCB0byBxdWVyeSBmb3IgdGhlIHNlbGVjdGlvbi5cbiAgICogQHJldHVybiBBIHNuYXBzaG90IGFycmF5IGNvbnRhaW5pbmcgdGhlIGVudGl0aWVzIHRoYXQgbWF0Y2ggdGhlIHByZWRpY2F0ZS5cbiAgICogXG4gICAqIEBleGFtcGxlIFNlbGVjdCBhbGwgdGhlIGBUb2RvYCBpbnN0YW5jZSB3aGVyZSB0aGUgYHRpdGxlYCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDEwMC4gXG5gYGBcbmxldCB0b2RvczpUb2RvW109c3RvcmUuc2VsZWN0KHRvZG89PnRvZG8udGl0bGUubGVuZ3RoPjEwMCk7XG5gYGBcbiAgICovXG4gIHNlbGVjdChwOiBQcmVkaWNhdGU8RT4pOiBFW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkOiBFW10gPSBbXTtcbiAgICBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkuZm9yRWFjaChlID0+IHtcbiAgICAgIGlmIChwKGUpKSB7XG4gICAgICAgIHNlbGVjdGVkLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgLyoqIFxuICAgKiBDb21wYXJlIGVudGl0aWVzIGJ5IEdVSUQgXG4gICAqIEBwYXJhbSBlMSBUaGUgZmlyc3QgZW50aXR5XG4gICAqIEBwYXJhbSBlMiBUaGUgc2Vjb25kIGVudGl0eVxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBlbnRpdGllcyBoYXZlIGVxdWFsIEdVSUQgaWRzXG4gICAqIEBleGFtcGxlIENvbXBhcmUgYHRvZG8xYCB3aXRoIGB0b2RvMmAgYnkgYGdpZGAuXG5gYGBcbmlmIChlcXVhbHNCeUdVSUQodG9kbzEsIHRvZG8yKSl7Li4ufTtcbmBgYFxuICAgKi9cbiAgZXF1YWxzQnlHVUlEKGUxOmFueSwgZTI6YW55KSB7XG4gICAgcmV0dXJuIGUxW3RoaXMuR1VJRF9LRVldID09IGUyW3RoaXMuR1VJRF9LRVldO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZW50aXRpZXMgYnkgSUQgXG4gICAqIEBwYXJhbSBlMSBUaGUgZmlyc3QgZW50aXR5XG4gICAqIEBwYXJhbSBlMiBUaGUgc2Vjb25kIGVudGl0eVxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBlbnRpdGllcyBoYXZlIGVxdWFsIElEIGlkc1xuICAgKiBAZXhhbXBsZSBDb21wYXJlIGB0b2RvMWAgd2l0aCBgdG9kbzJgIGJ5IGBpZGAuXG5gYGBcbmlmIChlcXVhbHNCeUlEKHRvZG8xLCB0b2RvMikpey4uLn07XG5gYGBcbiAgICovXG4gIGVxdWFsc0J5SUQoZTE6YW55LCBlMjphbnkpIHtcbiAgICByZXR1cm4gZTFbdGhpcy5JRF9LRVldID09IGUyW3RoaXMuSURfS0VZXTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgY29tcGxldGUgb24gYWxsIHtAbGluayBCZWhhdmlvclN1YmplY3R9IGluc3RhbmNlcy5cbiAgICogXG4gICAqIENhbGwgZGVzdHJveSB3aGVuIGRpc3Bvc2luZyBvZiB0aGUgc3RvcmUuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMubm90aWZ5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5ub3RpZnlEZWx0YS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubm90aWZ5UXVlcnkuY29tcGxldGUoKTtcbiAgfVxufSJdfQ==
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NsaWNlL3NyYy9saWIvQWJzdHJhY3RTdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUlwQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFBO0FBRXpCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFBO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFBO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFnQixNQUFNLENBQUM7SUFDdkQsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixPQUFPLEVBQUUsc0JBQXNCO0NBQ2hDLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBZ0IsYUFBYTtJQU9oQyxZQUFZLE1BQW9CO1FBTWpDOztXQUVHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUVyRDs7V0FFRztRQUNPLFdBQU0sR0FBVyxFQUFFLENBQUM7UUE0QzlCOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRTFDOzs7V0FHRztRQUNJLGNBQVMsR0FBbUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUU1Qzs7O1dBR0c7UUFDTyxXQUFNLEdBQUcsSUFBSSxhQUFhLENBQU0sQ0FBQyxDQUFDLENBQUE7UUFFNUM7OztXQUdHO1FBQ08sZ0JBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBVyxDQUFDLENBQUMsQ0FBQTtRQThCdEQ7Ozs7O1dBS0c7UUFDSyxRQUFHLEdBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQWxIMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNO1lBQ2xCLENBQUMsQ0FBQyxNQUFNLGlD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LE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUMzRDtRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxXQUFXO1FBQ1QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxRQUFRLENBQUMsTUFBa0I7UUFDekIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDaEQ7UUFDRCxNQUFNLElBQUksR0FBaUIsTUFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxZQUFZLENBQUMsTUFBa0I7UUFDN0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDbEQ7UUFDRCxNQUFNLEVBQUUsR0FBaUIsTUFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxJQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFdBQVcsQ0FBQyxFQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxNQUFNLENBQUMsQ0FBZTtRQUNwQixNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNSLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUFZLENBQUMsRUFBTSxFQUFFLEVBQU07UUFDekIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFVBQVUsQ0FBQyxFQUFNLEVBQUUsRUFBTTtRQUN2QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIlxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCJcbmltcG9ydCB7IERlbHRhLCBQcmVkaWNhdGUgfSBmcm9tIFwiLi9tb2RlbHNcIlxuaW1wb3J0IHsgU3RvcmVDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvU3RvcmVDb25maWdcIlxuXG5jb25zdCB7IGZyZWV6ZSB9ID0gT2JqZWN0XG5cbmNvbnN0IEVTVE9SRV9ERUZBVUxUX0lEX0tFWSA9IFwiaWRcIlxuY29uc3QgRVNUT1JFX0RFRkFVTFRfR0lEX0tFWSA9IFwiZ2lkXCJcblxuZXhwb3J0IGNvbnN0IEVTVE9SRV9DT05GSUdfREVGQVVMVDogU3RvcmVDb25maWcgPSBmcmVlemUoe1xuICBpZEtleTogRVNUT1JFX0RFRkFVTFRfSURfS0VZLFxuICBndWlkS2V5OiBFU1RPUkVfREVGQVVMVF9HSURfS0VZXG59KTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3RvcmU8RT4ge1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHN0b3JlLlxuICAgKi9cbiAgIHB1YmxpYyBjb25maWc6IFN0b3JlQ29uZmlnO1xuXG4gICBjb25zdHJ1Y3Rvcihjb25maWc/OiBTdG9yZUNvbmZpZykge1xuICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZ1xuICAgICAgID8gZnJlZXplKHsgLi4uRVNUT1JFX0NPTkZJR19ERUZBVUxULCAuLi5jb25maWcgfSlcbiAgICAgICA6IEVTVE9SRV9DT05GSUdfREVGQVVMVDtcbiAgIH1cbiBcbiAgLyoqXG4gICAqIE5vdGlmaWVzIG9ic2VydmVycyBvZiB0aGUgc3RvcmUgcXVlcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5UXVlcnkgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmc+KDEpO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBxdWVyeSBzdGF0ZS5cbiAgICovXG4gIHByb3RlY3RlZCBfcXVlcnk6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHF1ZXJ5IHN0YXRlIGFuZCBub3RpZmllcyBvYnNlcnZlcnMuXG4gICAqL1xuICBzZXQgcXVlcnkocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuX3F1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5ub3RpZnlRdWVyeS5uZXh0KHRoaXMuX3F1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIEEgc25hcHNob3Qgb2YgdGhlIHF1ZXJ5IHN0YXRlLlxuICAgKi9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZlIHRoZSBxdWVyeS5cbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICBsZXQgcXVlcnkkID0gc291cmNlLm9ic2VydmVRdWVyeSgpO1xuICAgIDwvcHJlPlxuICAqL1xuICBwdWJsaWMgb2JzZXJ2ZVF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLm5vdGlmeVF1ZXJ5LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgaWQga2V5IGZvciB0aGUgRVN0b3JlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHRoaXMuY29uZmlnLmlkS2V5O1xuICAgKi9cbiAgZ2V0IElEX0tFWSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5pZEtleVxuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCBndWlkIGtleSBmb3IgdGhlIEVTdG9yZSBpbnN0YW5jZS5cbiAgICogQHJldHVybiB0aGlzLmNvbmZpZy5ndWlkS2V5O1xuICAgKi9cbiAgZ2V0IEdVSURfS0VZKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmd1aWRLZXlcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmltYXJ5IGluZGV4IGZvciB0aGUgc3RvcmVzIGVsZW1lbnRzLlxuICAgKi9cbiAgcHVibGljIGVudHJpZXM6IE1hcDxzdHJpbmcsIEU+ID0gbmV3IE1hcCgpXG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IGVudHJpZXMgdGhhdCBhcmUga2V5ZWQgYnlcbiAgICogYW4gaWQgZ2VuZXJhdGVkIG9uIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBwdWJsaWMgaWRFbnRyaWVzOiBNYXA8c3RyaW5nLCBFPiA9IG5ldyBNYXAoKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbm90aWZpY2F0aW9ucyB0aGF0IGJyb2FjYXN0XG4gICAqIHRoZSBlbnRpcmUgc2V0IG9mIGVudHJpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5ID0gbmV3IFJlcGxheVN1YmplY3Q8RVtdPigxKVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbm90aWZpY2F0aW9ucyB0aGF0IGJyb2FjYXN0XG4gICAqIHN0b3JlIG9yIHNsaWNlIGRlbHRhIHN0YXRlIGNoYW5nZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5RGVsdGEgPSBuZXcgUmVwbGF5U3ViamVjdDxEZWx0YTxFPj4oMSlcblxuICAvKipcbiAgICogQ2FsbCBhbGwgdGhlIG5vdGlmaWVycyBhdCBvbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gdlxuICAgKiBAcGFyYW0gZGVsdGFcbiAgICovXG4gIHByb3RlY3RlZCBub3RpZnlBbGwodjogRVtdLCBkZWx0YTogRGVsdGE8RT4pIHtcbiAgICB0aGlzLm5vdGlmeS5uZXh0KHYpO1xuICAgIHRoaXMubm90aWZ5RGVsdGEubmV4dChkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSBzdG9yZSBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gc29ydCBPcHRpb25hbCBzb3J0aW5nIGZ1bmN0aW9uIHlpZWxkaW5nIGEgc29ydGVkIG9ic2VydmFibGUuXG4gICAqIEBleGFtcGxlXG5gYGBcbmxldCB0b2RvcyQgPSBzb3VyY2Uub2JzZXJ2ZSgpO1xuLy9vciB3aXRoIGEgc29ydCBieSB0aXRsZSBmdW5jdGlvblxubGV0IHRvZG9zJCA9IHNvdXJjZS5vYnNlcnZlKChhLCBiKT0+KGEudGl0bGUgPiBiLnRpdGxlID8gLTEgOiAxKSk7XG5gYGBcbiAgKi9cbiAgcHVibGljIG9ic2VydmUoc29ydD86IChhOiBhbnksIGI6IGFueSkgPT4gbnVtYmVyKTogT2JzZXJ2YWJsZTxFW10+IHtcbiAgICBpZiAoc29ydCkge1xuICAgICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUobWFwKChlOiBFW10pID0+IGUuc29ydChzb3J0KSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ub3RpZnkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQW4gT2JzZXJ2YWJsZTxFW10+IHJlZmVyZW5jZVxuICAgKiB0byB0aGUgZW50aXRpZXMgaW4gdGhlIHN0b3JlIG9yXG4gICAqIFNsaWNlIGluc3RhbmNlLlxuICAgKiBcbiAgICovXG4gICBwdWJsaWMgb2JzOiBPYnNlcnZhYmxlPEVbXT4gPSB0aGlzLm9ic2VydmUoKVxuXG5cblxuICAvKipcbiAgICogT2JzZXJ2ZSBkZWx0YSB1cGRhdGVzLlxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgICBsZXQgdG9kb3MkID0gc291cmNlLm9ic2VydmVEZWx0YSgpO1xuICAgICA8L3ByZT5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlRGVsdGEoKTogT2JzZXJ2YWJsZTxEZWx0YTxFPj4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmeURlbHRhLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKiBcbiAgICogQHJldHVybiBBIGhvdCB7QGxpbmsgT2JzZXJ2YWJsZX0gdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgIDxwcmU+XG4gICAgc291cmNlLmlzRW1wdHkoKTtcbiAgICA8L3ByZT5cbiAgKi9cbiAgaXNFbXB0eSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnkucGlwZShcbiAgICAgIG1hcCgoZW50cmllczogRVtdKSA9PiBlbnRyaWVzLmxlbmd0aCA9PSAwKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqIFxuICAgKiBAcmV0dXJuIEEgc25hcHNob3QgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgIHNvdXJjZS5pc0VtcHR5KCk7XG4gICAgPC9wcmU+XG4gICovXG4gIGlzRW1wdHlTbmFwc2hvdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmxlbmd0aCA9PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGNvbnRhaW5lZC5cbiAgICogQHBhcmFtIHAgVGhlIHByZWRpY2F0ZSB0byBhcHBseSBpbiBvcmRlciB0byBmaWx0ZXIgdGhlIGNvdW50XG4gICAqL1xuICBjb3VudChwPzogUHJlZGljYXRlPEU+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAocCkge1xuICAgICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUoXG4gICAgICAgIG1hcCgoZTogRVtdKSA9PiBlLnJlZHVjZSgodG90YWwsIGUpID0+IHRvdGFsICsgKHAoZSkgPyAxIDogMCksIDApKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5LnBpcGUobWFwKChlbnRyaWVzOiBFW10pID0+IGVudHJpZXMubGVuZ3RoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNuYXBzaG90IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBjb250YWluZWQgaW4gdGhlIHN0b3JlLlxuICAgKiBAcGFyYW0gcCBUaGUgcHJlZGljYXRlIHRvIGFwcGx5IGluIG9yZGVyIHRvIGZpbHRlciB0aGUgY291bnRcbiAgICovXG4gIGNvdW50U25hcHNob3QocD86IFByZWRpY2F0ZTxFPik6IG51bWJlciB7XG4gICAgaWYgKHApIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkuZmlsdGVyKHApLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3Qgb2YgYWxsIGVudHJpZXMuXG4gICAqIFxuICAgKiBAcmV0dXJuIFNuYXBzaG90IGFycmF5IG9mIGFsbCB0aGUgZWxlbWVudHMgdGhlIGVudGl0aWVzIHRoZSBzdG9yZSBjb250YWlucy5cbiAgICogXG4gICAqIEBleGFtcGxlIE9ic2VydmUgYSBzbmFwc2hvdCBvZiBhbGwgdGhlIGVudGl0aWVzIGluIHRoZSBzdG9yZS5cbmBgYFxubGV0IHNlbGVjdGVkVG9kb3M6VG9kb1tdID0gc291cmNlLmFsbFNuYXBzaG90KCk7XG5gYGBcbiAgICovXG4gIGFsbFNuYXBzaG90KCk6IEVbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVudHJpZXMgY29udGFpbiB0aGUgaWRlbnRpZmllZCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBwYXJhbSB0YXJnZXQgRWl0aGVyIGFuIGluc3RhbmNlIG9mIHR5cGUgYEVgIG9yIGEgYGd1aWRgIGlkZW50aWZ5aW5nIHRoZSBpbnN0YW5jZS4gXG4gICAqIEBwYXJhbSBieUlkIFdoZXRoZXIgdGhlIGxvb2t1cCBzaG91bGQgYmUgcGVyZm9ybWVkIHdpdGggdGhlIGBpZGAga2V5IHJhdGhlciB0aGFuIHRoZSBgZ3VpZGAuXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbmNlIGlkZW50aWZpZWQgYnkgdGhlIGd1aWQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgICBsZXQgY29udGFpbnM6Ym9vbGVhbiA9IHNvdXJjZS5jb250YWlucyhndWlkKTtcbiAgICAgPC9wcmU+XG4gICAqL1xuICBjb250YWlucyh0YXJnZXQ6IEUgfCBzdHJpbmcpOmJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmdldCh0YXJnZXQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBndWlkOiBzdHJpbmcgPSAoPGFueT50YXJnZXQpW3RoaXMuY29uZmlnLmd1aWRLZXldO1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMuZ2V0KGd1aWQpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW50cmllcyBjb250YWluIHRoZSBpZGVudGlmaWVkIGluc3RhbmNlLlxuICAgKiBcbiAgICogQHBhcmFtIHRhcmdldCBFaXRoZXIgYW4gaW5zdGFuY2Ugb2YgdHlwZSBgRWAgb3IgYSBgaWRgIGlkZW50aWZ5aW5nIHRoZSBpbnN0YW5jZS4gXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGluc3RhbmNlIGlkZW50aWZpZWQgYnkgdGhlIGBpZGAgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgICBsZXQgY29udGFpbnM6Ym9vbGVhbiA9IHNvdXJjZS5jb250YWlucyhndWlkKTtcbiAgICAgPC9wcmU+XG4gICAqL1xuICBjb250YWluc0J5SWQodGFyZ2V0OiBFIHwgc3RyaW5nKTpib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHRoaXMuaWRFbnRyaWVzLmdldCh0YXJnZXQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpZDogc3RyaW5nID0gKDxhbnk+dGFyZ2V0KVt0aGlzLmNvbmZpZy5pZEtleV07XG4gICAgcmV0dXJuIHRoaXMuaWRFbnRyaWVzLmdldChpZCkgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbmQgcmV0dXJuIHRoZSBlbnRpdHkgaWRlbnRpZmllZCBieSB0aGUgR1VJRCBwYXJhbWV0ZXJcbiAgICogaWYgaXQgZXhpc3RzIGFuZCByZXR1cm4gaXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlkXG4gICAqIEByZXR1cm4gVGhlIGVudGl0eSBpbnN0YW5jZSBpZiBpdCBleGlzdHMsIG51bGwgb3RoZXJ3aXNlXG4gICAqL1xuICBmaW5kT25lKGd1aWQ6IHN0cmluZyk6IEUgfCB1bmRlZmluZWR7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5nZXQoZ3VpZCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhbmQgcmV0dXJuIHRoZSBlbnRpdHkgaWRlbnRpZmllZCBieSB0aGUgSUQgcGFyYW1ldGVyXG4gICAqIGlmIGl0IGV4aXN0cyBhbmQgcmV0dXJuIGl0LlxuICAgKlxuICAgKiBAcGFyYW0gaWRcbiAgICogQHJldHVybiBUaGUgZW50aXR5IGluc3RhbmNlIGlmIGl0IGV4aXN0cywgbnVsbCBvdGhlcndpc2VcbiAgICovXG4gIGZpbmRPbmVCeUlEKGlkOiBzdHJpbmcpOiBFIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pZEVudHJpZXMuZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBvZiB0aGUgZW50cmllcyB0aGF0IG1hdGNoIHRoZSBwcmVkaWNhdGUuXG4gICAqXG4gICAqIEBwYXJhbSBwIFRoZSBwcmVkaWNhdGUgdXNlZCB0byBxdWVyeSBmb3IgdGhlIHNlbGVjdGlvbi5cbiAgICogQHJldHVybiBBIHNuYXBzaG90IGFycmF5IGNvbnRhaW5pbmcgdGhlIGVudGl0aWVzIHRoYXQgbWF0Y2ggdGhlIHByZWRpY2F0ZS5cbiAgICogXG4gICAqIEBleGFtcGxlIFNlbGVjdCBhbGwgdGhlIGBUb2RvYCBpbnN0YW5jZSB3aGVyZSB0aGUgYHRpdGxlYCBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDEwMC4gXG5gYGBcbmxldCB0b2RvczpUb2RvW109c3RvcmUuc2VsZWN0KHRvZG89PnRvZG8udGl0bGUubGVuZ3RoPjEwMCk7XG5gYGBcbiAgICovXG4gIHNlbGVjdChwOiBQcmVkaWNhdGU8RT4pOiBFW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkOiBFW10gPSBbXTtcbiAgICBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkuZm9yRWFjaChlID0+IHtcbiAgICAgIGlmIChwKGUpKSB7XG4gICAgICAgIHNlbGVjdGVkLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgLyoqIFxuICAgKiBDb21wYXJlIGVudGl0aWVzIGJ5IEdVSUQgXG4gICAqIEBwYXJhbSBlMSBUaGUgZmlyc3QgZW50aXR5XG4gICAqIEBwYXJhbSBlMiBUaGUgc2Vjb25kIGVudGl0eVxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBlbnRpdGllcyBoYXZlIGVxdWFsIEdVSUQgaWRzXG4gICAqIEBleGFtcGxlIENvbXBhcmUgYHRvZG8xYCB3aXRoIGB0b2RvMmAgYnkgYGdpZGAuXG5gYGBcbmlmIChlcXVhbHNCeUdVSUQodG9kbzEsIHRvZG8yKSl7Li4ufTtcbmBgYFxuICAgKi9cbiAgZXF1YWxzQnlHVUlEKGUxOmFueSwgZTI6YW55KSB7XG4gICAgcmV0dXJuIGUxW3RoaXMuR1VJRF9LRVldID09IGUyW3RoaXMuR1VJRF9LRVldO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgZW50aXRpZXMgYnkgSUQgXG4gICAqIEBwYXJhbSBlMSBUaGUgZmlyc3QgZW50aXR5XG4gICAqIEBwYXJhbSBlMiBUaGUgc2Vjb25kIGVudGl0eVxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHR3byBlbnRpdGllcyBoYXZlIGVxdWFsIElEIGlkc1xuICAgKiBAZXhhbXBsZSBDb21wYXJlIGB0b2RvMWAgd2l0aCBgdG9kbzJgIGJ5IGBpZGAuXG5gYGBcbmlmIChlcXVhbHNCeUlEKHRvZG8xLCB0b2RvMikpey4uLn07XG5gYGBcbiAgICovXG4gIGVxdWFsc0J5SUQoZTE6YW55LCBlMjphbnkpIHtcbiAgICByZXR1cm4gZTFbdGhpcy5JRF9LRVldID09IGUyW3RoaXMuSURfS0VZXTtcbiAgfVxuICAvKipcbiAgICogQ2FsbHMgY29tcGxldGUgb24gYWxsIHtAbGluayBCZWhhdmlvclN1YmplY3R9IGluc3RhbmNlcy5cbiAgICogXG4gICAqIENhbGwgZGVzdHJveSB3aGVuIGRpc3Bvc2luZyBvZiB0aGUgc3RvcmUuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMubm90aWZ5LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5ub3RpZnlEZWx0YS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubm90aWZ5UXVlcnkuY29tcGxldGUoKTtcbiAgfVxufSJdfQ==
@@ -39,11 +39,6 @@ export class EStore extends AbstractStore {
39
39
  ```*/
40
40
  constructor(entities = [], config) {
41
41
  super(config);
42
- /**
43
- * An Observable<E[]> reference so that
44
- *
45
- */
46
- this.obs = this.observe();
47
42
  /**
48
43
  * Notifies observers when the store is empty.
49
44
  */
@@ -596,4 +591,4 @@ export class EStore extends AbstractStore {
596
591
  this.notifyLoading.next(this.loading);
597
592
  }
598
593
  }
599
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRVN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2xpY2Uvc3JjL2xpYi9FU3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxNQUFNLE9BQU8sTUFBVSxTQUFRLGFBQWdCO0lBQzdDOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsWUFBWSxXQUFnQixFQUFFLEVBQUUsTUFBb0I7UUFDbEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBNENoQjs7O1dBR0c7UUFDSSxRQUFHLEdBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUU1Qzs7V0FFRztRQUNLLGlCQUFZLEdBQUcsSUFBSSxhQUFhLENBQWlCLENBQUMsQ0FBQyxDQUFDO1FBRzVEOzs7O1dBSUc7UUFDSSxXQUFNLEdBQW1CLElBQUksR0FBRyxFQUFFLENBQUM7UUE2RjFDOzs7OztXQUtHO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztRQUV0RDs7Ozs7Ozs7OztXQVVHO1FBQ0ssYUFBUSxHQUFZLElBQUksQ0FBQztRQStEakM7Ozs7O1dBS0c7UUFDSyxvQkFBZSxHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXhEOzs7OztXQUtHO1FBQ0ssZUFBVSxHQUFZLEtBQUssQ0FBQztRQStDcEM7O1dBRUc7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RiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0U3RvcmUgfSBmcm9tICcuL0Fic3RyYWN0U3RvcmUnO1xuaW1wb3J0IHsgU3RvcmVDb25maWcgfSBmcm9tICcuL21vZGVscy9TdG9yZUNvbmZpZyc7XG5pbXBvcnQgeyBHVUlEIH0gZnJvbSAnLi91dGlsaXRpZXMnO1xuXG5pbXBvcnQgeyBBY3Rpb25UeXBlcywgUHJlZGljYXRlLCBEZWx0YSB9IGZyb20gJy4vbW9kZWxzLyc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBvZiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVdoaWxlLCBmaWx0ZXIsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNsaWNlIH0gZnJvbSAnLi9TbGljZSc7XG5cbi8qKlxuICogVGhpcyBgdG9kb0ZhY3RvcnlgIGNvZGUgd2lsbCBiZSB1c2VkIHRvIGlsbHVzdHJhdGUgdGhlIEFQSSBleGFtcGxlcy4gIFRoZSBmb2xsb3dpbmdcbiAqIHV0aWxpdGllcyBhcmUgdXNlZCBpbiB0aGUgdGVzdHMgYW5kIHRoZSBBUEkgVHlwZWRvYyBleGFtcGxlcyBjb250YWluZWQgaGVyZS5cbiAqIEBleGFtcGxlIFV0aWxpdGllcyBmb3IgQVBJIEV4YW1wbGVzXG5gYGBcbmV4cG9ydCBjb25zdCBlbnVtIFRvZG9TbGljZUVudW0ge1xuICBDT01QTEVURSA9IFwiQ29tcGxldGVcIixcbiAgSU5DT01QTEVURSA9IFwiSW5jb21wbGV0ZVwiXG59XG5cbmV4cG9ydCBjbGFzcyBUb2RvIHtcbiAgY29uc3RydWN0b3IocHVibGljIGNvbXBsZXRlOiBib29sZWFuLCBwdWJsaWMgdGl0bGU6IHN0cmluZyxwdWJsaWMgZ2lkPzpzdHJpbmcsIHB1YmxpYyBpZD86c3RyaW5nKSB7fVxufVxuXG5leHBvcnQgbGV0IHRvZG9zID0gW25ldyBUb2RvKGZhbHNlLCBcIllvdSBjb21wbGV0ZSBtZSFcIiksIG5ldyBUb2RvKHRydWUsIFwiWW91IGNvbXBsZXRlZCBtZSFcIildO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9kb3NGYWN0b3J5KCk6VG9kb1tdIHtcbiAgcmV0dXJuIFtuZXcgVG9kbyhmYWxzZSwgXCJZb3UgY29tcGxldGUgbWUhXCIpLCBuZXcgVG9kbyh0cnVlLCBcIllvdSBjb21wbGV0ZWQgbWUhXCIpXTtcbn1cbiBgYGAgXG4gKi9cblxuZXhwb3J0IGNsYXNzIEVTdG9yZTxFPiBleHRlbmRzIEFic3RyYWN0U3RvcmU8RT4ge1xuICAvKipcbiAgICogU3RvcmUgY29uc3RydWN0b3IgKEluaXRpYWxpemF0aW9uIHdpdGggZWxlbWVudCBpcyBvcHRpb25hbClcbiAgICpcbiAgICogcGVyZm9ybSBpbml0aWFsIG5vdGlmaWNhdGlvbiB0byBhbGwgb2JzZXJ2ZXJzLFxuICAgKiBzdWNoIHRoYXQgZnVuY3Rpb24gbGlrZSB7QGxpbmsgY29tYmluZUxhdGVzdH17fVxuICAgKiB3aWxsIGV4ZWN1dGUgYXQgbGVhc3Qgb25jZS5cbiAgICogQHBhcmFtIGVudGl0aWVzXG4gICAqIEBleGFtcGxlIER5bmFtaWMgYEVTdG9yZTxUb2RvPmAgQ3JlYXRpb24gXG5gYGBcbi8vIEluaXRpYWxpemUgdGhlIFN0b3JlXG5sZXQgc3RvcmU6IEVTdG9yZTxUb2RvPiA9IG5ldyBFU3RvcmU8VG9kbz4odG9kb3NGYWN0b3J5KCkpO1xuYGBgKi9cbiAgY29uc3RydWN0b3IoZW50aXRpZXM6IEVbXSA9IFtdLCBjb25maWc/OiBTdG9yZUNvbmZpZykge1xuICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgY29uc3QgZGVsdGE6IERlbHRhPEU+ID0geyB0eXBlOiBBY3Rpb25UeXBlcy5JTlRJQUxJWkUsIGVudHJpZXM6IGVudGl0aWVzIH07XG4gICAgdGhpcy5wb3N0KGVudGl0aWVzKVxuICAgIHRoaXMubm90aWZ5RGVsdGEubmV4dChkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbHMgY29tcGxldGUgb24gYWxsIHtAbGluayBCZWhhdmlvclN1YmplY3R9IGluc3RhbmNlcy5cbiAgICogXG4gICAqIENhbGwgZGVzdHJveSB3aGVuIGRpc3Bvc2luZyBvZiB0aGUgc3RvcmUuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKVxuICAgIHRoaXMubm90aWZ5TG9hZGluZy5jb21wbGV0ZSgpXG4gICAgdGhpcy5ub3RpZnlBY3RpdmUuY29tcGxldGUoKVxuICAgIHRoaXMuc2xpY2VzLmZvckVhY2goc2xpY2UgPT4gc2xpY2UuZGVzdHJveSgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGVudGl0eTpcbiAgICogXG4gICAqIElmIHRoZSBzdG9yZSBjb250YWlucyB0aGUgZW50aXR5XG4gICAqIGl0IHdpbGwgYmUgZGVsZXRlZC4gIElmIHRoZSBzdG9yZSBcbiAgICogZG9lcyBub3QgY29udGFpbnMgdGhlIGVudGl0eSxcbiAgICogaXQgaXMgYWRkZWQuXG4gICAqIEBwYXJhbSBlIFxuICAgKiBAZXhhbXBsZSBUb2dnbGUgdGhlIGBUb2RvYCBpbnN0YW5jZVxuYGBgXG5lc3RvcmUucG9zdCh0b2RvKTtcbi8vIFJlbW92ZSB0b2RvXG5lc3RvcmUudG9nZ2xlKHRvZG8pO1xuLy8gQWRkIGl0IGJhY2tcbmVzdG9yZS50b2dnbGUodG9kbyk7XG5cbmBgYFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZShlOiBFKSB7XG4gICAgaWYgKHRoaXMuY29udGFpbnMoZSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlKGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvc3QoZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuIE9ic2VydmFibGU8RVtdPiByZWZlcmVuY2Ugc28gdGhhdCBcbiAgICogXG4gICAqL1xuICBwdWJsaWMgb2JzOiBPYnNlcnZhYmxlPEVbXT4gPSB0aGlzLm9ic2VydmUoKVxuXG4gIC8qKlxuICAgKiBOb3RpZmllcyBvYnNlcnZlcnMgd2hlbiB0aGUgc3RvcmUgaXMgZW1wdHkuXG4gICAqL1xuICBwcml2YXRlIG5vdGlmeUFjdGl2ZSA9IG5ldyBSZXBsYXlTdWJqZWN0PE1hcDxzdHJpbmcsIEU+PigxKTtcblxuXG4gIC8qKlxuICAgKiBgTWFwYCBvZiBhY3RpdmUgZW50dGllcy4gVGhlIGluc3RhbmNlIGlzIHB1YmxpYyBhbmQgY2FuIGJlIHVzZWRcbiAgICogZGlyZWN0bHkgdG8gYWRkIGFuZCByZW1vdmUgYWN0aXZlIGVudGl0aWVzLCBob3dldmVyIHdlIHJlY29tbWVuZFxuICAgKiB1c2luZyB0aGUge0BsaW5rIGFkZEFjdGl2ZX0gYW5kIHtAbGluayBkZWxldGVBY3RpdmV9IG1ldGhvZHMuXG4gICAqL1xuICBwdWJsaWMgYWN0aXZlOiBNYXA8c3RyaW5nLCBFPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQWRkIG11bHRpcGxlIGVudGl0eSBlbnRpdGllcyB0byBhY3RpdmUuXG4gICAqIFxuICAgKiBJZiB0aGUgZW50aXR5IGlzIG5vdCBjb250YWluZWQgaW4gdGhlIHN0b3JlIGl0IGlzIGFkZGVkXG4gICAqIHRvIHRoZSBzdG9yZSBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gYGFjdGl2ZWAuXG4gICAqIFxuICAgKiBBbHNvIHdlIGNsb25lIHRoZSBtYXAgcHJpb3IgdG8gYnJvYWRjYXN0aW5nIGl0IHdpdGhcbiAgICogYG5vdGlmeUFjdGl2ZWAgdG8gbWFrZSBzdXJlIHdlIHdpbGwgdHJpZ2dlciBBbmd1bGFyIFxuICAgKiBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBldmVudCB0aGF0IGl0IG1haW50YWlucyBcbiAgICogYSByZWZlcmVuY2UgdG8gdGhlIGBhY3RpdmVgIHN0YXRlIGBNYXBgIGluc3RhbmNlLlxuICAgKiBcbiAgICogQGV4YW1wbGUgQWRkIGEgYHRvZG8xYCBhbmQgYHRvZG8yYCBhcyBhY3RpdmVcbmBgYFxuYWRkQWN0aXZlKHRvZG8xKTtcbmFkZEFjdGl2ZSh0b2RvMik7XG5gYGBcbiAgICovXG4gIHB1YmxpYyBhZGRBY3RpdmUoZTogRSkge1xuICAgIGlmICh0aGlzLmNvbnRhaW5zKGUpKSB7XG4gICAgICB0aGlzLmFjdGl2ZS5zZXQoKDxhbnk+ZSkuZ2lkLCBlKTtcbiAgICAgIHRoaXMubm90aWZ5QWN0aXZlLm5leHQobmV3IE1hcCh0aGlzLmFjdGl2ZSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucG9zdChlKTtcbiAgICAgIHRoaXMuYWN0aXZlLnNldCgoPGFueT5lKS5naWQsIGUpO1xuICAgICAgdGhpcy5ub3RpZnlBY3RpdmUubmV4dChuZXcgTWFwKHRoaXMuYWN0aXZlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBlbnRpdHkgYXMgYWN0aXZlLlxuICAgKiBcbiAgICogQWxzbyB3ZSBjbG9uZSB0aGUgbWFwIHByaW9yIHRvIGJyb2FkY2FzdGluZyBpdCB3aXRoXG4gICAqIGBub3RpZnlBY3RpdmVgIHRvIG1ha2Ugc3VyZSB3ZSB3aWxsIHRyaWdnZXIgQW5ndWxhciBcbiAgICogY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgZXZlbnQgdGhhdCBpdCBtYWludGFpbnMgXG4gICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBgYWN0aXZlYCBzdGF0ZSBgTWFwYCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBleGFtcGxlIE1hcmsgYSBgdG9kb2AgaW5zdGFuY2UgYXMgYWN0aXZlXG4gIGBgYFxuZGVsZXRlQWN0aXZlKHRvZG8xKTtcbmRlbGV0ZUFjdGl2ZSh0b2RvMik7XG4gIGBgYFxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUFjdGl2ZShlOiBFKSB7XG4gICAgdGhpcy5hY3RpdmUuZGVsZXRlKCg8YW55PmUpLmdpZCk7XG4gICAgdGhpcy5ub3RpZnlBY3RpdmUubmV4dChuZXcgTWFwKHRoaXMuYWN0aXZlKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgLyByZXNldCB0aGUgYWN0aXZlIGVudGl0eSBtYXAuXG4gICAqIFxuICAgKiBBbHNvIHdlIGNsb25lIHRoZSBtYXAgcHJpb3IgdG8gYnJvYWRjYXN0aW5nIGl0IHdpdGhcbiAgICogYG5vdGlmeUFjdGl2ZWAgdG8gbWFrZSBzdXJlIHdlIHdpbGwgdHJpZ2dlciBBbmd1bGFyIFxuICAgKiBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBldmVudCB0aGF0IGl0IG1haW50YWlucyBcbiAgICogYSByZWZlcmVuY2UgdG8gdGhlIGBhY3RpdmVgIHN0YXRlIGBNYXBgIGluc3RhbmNlLlxuICAgKiBcbiAgICogQGV4YW1wbGUgTWFyayBhIGB0b2RvYCBpbnN0YW5jZSBhcyBhY3RpdmVcbiAgYGBgXG5kZWxldGVBY3RpdmUodG9kbzEpO1xuZGVsZXRlQWN0aXZlKHRvZG8yKTtcbiAgYGBgXG4gICAqL1xuICBjbGVhckFjdGl2ZSgpIHtcbiAgICB0aGlzLmFjdGl2ZS5jbGVhcigpO1xuICAgIHRoaXMubm90aWZ5QWN0aXZlLm5leHQobmV3IE1hcCh0aGlzLmFjdGl2ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgdGhlIGFjdGl2ZSBlbnRpdHkuXG4gICAqIEBleGFtcGxlXG4gICAgIDxwcmU+XG4gICAgbGV0IGFjdGl2ZSQgPSBzb3VyY2Uub2JzZXJ2ZUFjdGl2ZSgpO1xuICAgIDwvcHJlPlxuICAqL1xuICBwdWJsaWMgb2JzZXJ2ZUFjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnlBY3RpdmUuYXNPYnNlcnZhYmxlKClcbiAgfVxuXG5cbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTE9BRElOR1xuICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgYSBsb2FkIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGUgZXJyb3IgT2JzZXJ2YWJsZSBzaG91bGQgYmUgY3JlYXRlZCBieSB0aGUgXG4gICAqIGNsaWVudC5cbiAgICovXG4gIHB1YmxpYyBsb2FkaW5nRXJyb3IhOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqIE5vdGlmaWVzIG9ic2VydmVycyB3aGVuIHRoZSBzdG9yZSBpcyBsb2FkaW5nLlxuICAgKiBcbiAgICogVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvdW5kIHdoZW4gaW1wbGVtZW50aW5nXG4gICAqIGBPYnNlcnZhYmxlYCBkYXRhIHNvdXJjZXMuXG4gICAqL1xuICBwcml2YXRlIG5vdGlmeUxvYWRpbmcgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgbG9hZGluZyBzdGF0ZS4gIFVzZSBsb2FkaW5nIHdoZW4gZmV0Y2hpbmcgbmV3XG4gICAqIGRhdGEgZm9yIHRoZSBzdG9yZS4gIFRoZSBkZWZhdWx0IGxvYWRpbmcgc3RhdGUgaXMgYHRydWVgLlxuICAgKiBcbiAgICogVGhpcyBpcyBzdWNoIHRoYXQgaWYgZGF0YSBpcyBmZXRjaGVkIGFzeW5jaHJvbm91c2x5IFxuICAgKiBpbiBhIHNlcnZpY2UsIGNvbXBvbmVudHMgY2FuIHdhaXQgb24gbG9hZGluZyBub3RpZmljYXRpb25cbiAgICogYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmV0cmlldmUgZGF0YSBmcm9tIHRoZSBzZXJ2aWNlLlxuICAgKlxuICAgKiBMb2FkaW5nIGNvdWxkIGJlIGJhc2VkIG9uIGEgY29tcG9zaXRlIHJlc3BvbnNlLiAgRm9yIGV4YW1wbGVcbiAgICogd2hlbiB0aGUgc3RvY2sgYW5kIG11dHVhbCBmdW5kcyBoYXZlIGxvYWRlZCwgc2V0IGxvYWRpbmcgdG8gYGZhbHNlYC5cbiAgICovXG4gIHByaXZhdGUgX2xvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUgYW5kIG5vdGlmaWVzIG9ic2VydmVycy5cbiAgICovXG4gIHNldCBsb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nID0gbG9hZGluZztcbiAgICB0aGlzLm5vdGlmeUxvYWRpbmcubmV4dCh0aGlzLl9sb2FkaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIEEgc25hcHNob3Qgb2YgdGhlIGxvYWRpbmcgc3RhdGUuXG4gICAqL1xuICBnZXQgbG9hZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZlIGxvYWRpbmcuXG4gICAqIEBleGFtcGxlXG4gICAgIDxwcmU+XG4gICAgbGV0IGxvYWRpbmckID0gc291cmNlLm9ic2VydmVMb2FkaW5nKCk7XG4gICAgPC9wcmU+XG5cbiAgICBOb3RlIHRoYXQgdGhpcyBvYnZlcmFibGUgcGlwZWQgdGhyb3VnaFxuICAgIGB0YWtlV2hpbGUodi0+diwgdHJ1ZSksIHN1Y2ggdGhhdCBpdCB3aWxsIFxuICAgIGNvbXBsZXRlIGFmdGVyIGVhY2ggZW1pc3Npb24uXG5cbiAgICBTZWU6XG4gICAgaHR0cHM6Ly9tZWRpdW0uY29tL0BvbGUuZXJzb3kvd2FpdGluZy1vbi1lc3RvcmUtdG8tbG9hZC04ZGNiZTE2MTYxM2NcblxuICAgIEZvciBtb3JlIGRldGFpbHMuXG4gICovXG4gIHB1YmxpYyBvYnNlcnZlTG9hZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5ub3RpZnlMb2FkaW5nLmFzT2JzZXJ2YWJsZSgpLlxuICAgICAgcGlwZSh0YWtlV2hpbGUodiA9PiB2LCB0cnVlKSk7XG4gIH1cblxuICAvKipcbiAgICogTm90ZmlpZXMgd2hlbiBsb2FkaW5nIGhhcyBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZUxvYWRpbmdDb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlTG9hZGluZygpLnBpcGUoXG4gICAgICBmaWx0ZXIobG9hZGluZyA9PiBsb2FkaW5nID09IGZhbHNlKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiBvZih0cnVlKSkpXG4gIH1cblxuXG5cblxuXG5cbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0VBUkNISU5HXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgYSBzZWFyY2ggcmVxdWVzdC5cbiAgICogXG4gICAqIFRoZSBlcnJvciBPYnNlcnZhYmxlIHNob3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBcbiAgICogY2xpZW50LlxuICAgKi9cbiAgcHVibGljIHNlYXJjaEVycm9yITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIC8qKlxuICAgKiBOb3RpZmllcyBvYnNlcnZlcnMgdGhhdCBhIHNlYXJjaCBpcyBpbiBwcm9ncmVzcy5cbiAgICogXG4gICAqIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3VuZCB3aGVuIGltcGxlbWVudGluZ1xuICAgKiBgT2JzZXJ2YWJsZWAgZGF0YSBzb3VyY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBub3RpZnlTZWFyY2hpbmcgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgYHNlYXJjaGluZ2Agc3RhdGUuICBVc2UgYHNlYXJjaGluZ2BcbiAgICogZm9yIGV4YW1wbGUgdG8gZGlzcGxheSBhIHNwaW5ubmVyIFxuICAgKiB3aGVuIHBlcmZvcm1pbmcgYSBzZWFyY2guICBcbiAgICogVGhlIGRlZmF1bHQgYHNlYXJjaGluZ2Agc3RhdGUgaXMgYGZhbHNlYC5cbiAgICovXG4gIHByaXZhdGUgX3NlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjdXJyZW50IHNlYXJjaGluZyBzdGF0ZSBhbmQgbm90aWZpZXMgb2JzZXJ2ZXJzLlxuICAgKi9cbiAgc2V0IHNlYXJjaGluZyhzZWFyY2hpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zZWFyY2hpbmcgPSBzZWFyY2hpbmc7XG4gICAgdGhpcy5ub3RpZnlTZWFyY2hpbmcubmV4dCh0aGlzLl9zZWFyY2hpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm4gQSBzbmFwc2hvdCBvZiB0aGUgc2VhcmNoaW5nIHN0YXRlLlxuICAgKi9cbiAgZ2V0IHNlYXJjaGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmUgc2VhcmNoaW5nLlxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgIGxldCBzZWFyY2hpbmckID0gc291cmNlLm9ic2VydmVTZWFyY2hpbmcoKTtcbiAgICA8L3ByZT5cbiAgXG4gICAgTm90ZSB0aGF0IHRoaXMgb2J2ZXJhYmxlIHBpcGVkIHRocm91Z2hcbiAgICBgdGFrZVdoaWxlKHYtPnYsIHRydWUpLCBzdWNoIHRoYXQgaXQgd2lsbCBcbiAgICBjb21wbGV0ZSBhZnRlciBlYWNoIGVtaXNzaW9uLlxuICBcbiAgICBTZWU6XG4gICAgaHR0cHM6Ly9tZWRpdW0uY29tL0BvbGUuZXJzb3kvd2FpdGluZy1vbi1lc3RvcmUtdG8tbG9hZC04ZGNiZTE2MTYxM2NcbiAgXG4gICAgRm9yIG1vcmUgZGV0YWlscy5cbiAgKi9cbiAgcHVibGljIG9ic2VydmVTZWFyY2hpbmcoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5U2VhcmNoaW5nLmFzT2JzZXJ2YWJsZSgpLlxuICAgICAgcGlwZSh0YWtlV2hpbGUodiA9PiB2LCB0cnVlKSk7XG4gIH1cblxuICAvKipcbiAgICogTm90ZmlpZXMgd2hlbiBzZWFyY2hpbmcgaGFzIGNvbXBsZXRlZC5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlU2VhcmNoaW5nQ29tcGxldGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZVNlYXJjaGluZygpLnBpcGUoXG4gICAgICBmaWx0ZXIoc2VhcmNoaW5nID0+IHNlYXJjaGluZyA9PSBmYWxzZSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodHJ1ZSkpKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIHNsaWNlc1xuICAgKi9cbiAgcHJpdmF0ZSBzbGljZXM6IE1hcDxzdHJpbmcsIFNsaWNlPEU+PiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQWRkcyBhIHNsaWNlIHRvIHRoZSBzdG9yZSBhbmQga2V5cyBpdCBieSB0aGUgc2xpY2VzIGxhYmVsLlxuICAgKlxuICAgKiBAcGFyYW0gcFxuICAgKiBAcGFyYW0gbGFiZWxcbiAgICogXG4gICAqIEBleGFtcGxlIFNldHVwIGEgVG9kbyBTbGljZSBmb3IgQ09NUExFVEUgVG9kb3NcbmBgYFxuc291cmNlLmFkZFNsaWNlKHRvZG8gPT4gdG9kby5jb21wbGV0ZSwgVG9kb1NsaWNlcy5DT01QTEVURSk7XG5gYGBcbiAgICovXG4gIGFkZFNsaWNlKHA6IFByZWRpY2F0ZTxFPiwgbGFiZWw6IHN0cmluZykge1xuICAgIGNvbnN0IHNsaWNlOiBTbGljZTxFPiA9IG5ldyBTbGljZShcbiAgICAgIGxhYmVsLFxuICAgICAgcCxcbiAgICAgIHRoaXMpXG4gICAgdGhpcy5zbGljZXMuc2V0KHNsaWNlLmxhYmVsLCBzbGljZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzbGljZVxuICAgKiBAcGFyYW0gbGFiZWwgVGhlIGxhYmVsIGlkZW50aWZ5aW5nIHRoZSBzbGljZVxuICAgKiBcbiAgICogQGV4YW1wbGUgUmVtb3ZlIHRoZSBUb2RvU2xpY2VzLkNPTVBMRVRFIFNsaWNlXG5gYGBcbnNvdXJjZS5yZW1vdmVTbGljZShUb2RvU2xpY2VzLkNPTVBMRVRFKTtcbmBgYFxuICAgKi9cbiAgcmVtb3ZlU2xpY2UobGFiZWw6IHN0cmluZykge1xuICAgIHRoaXMuc2xpY2VzLmRlbGV0ZShsYWJlbCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2xpY2VcbiAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCBpZGVudGlmeWluZyB0aGUgc2xpY2VcbiAgICogQHJldHVybiBUaGUgU2xpY2UgaW5zdGFuY2Ugb3IgdW5kZWZpbmVkIFxuICAgKiBcbiAgICogQGV4YW1wbGUgR2V0IHRoZSBUb2RvU2xpY2VzLkNPTVBMRVRFIHNsaWNlXG5gYGBcbnNvdXJjZS5nZXRTbGljZShUb2RvU2xpY2VzLkNPTVBMRVRFKTtcbmBgYFxuICAgKi9cbiAgZ2V0U2xpY2UobGFiZWw6IHN0cmluZyk6IFNsaWNlPEU+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zbGljZXMuZ2V0KGxhYmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0IChBZGQgYSBuZXcpIGVsZW1lbnQocykgdG8gdGhlIHN0b3JlLlxuICAgKiBAcGFyYW0gZSBBbiBpbmRpaWR1YWwgZW50aXR5IG9yIGFuIGFycmF5IG9mIGVudGl0aWVzXG4gICAqIEBleGFtcGxlIFBvc3QgYSBgdG9kb2AuXG5gYGBcbnN0b3JlLnBvc3QodG9kbyk7XG5gYGBcbiAgICovXG4gIHBvc3QoZTogRSB8IEVbXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgY29uc3QgZ3VpZDogc3RyaW5nID0gKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV1cbiAgICAgICAgPyAoPGFueT5lKVt0aGlzLkdVSURfS0VZXVxuICAgICAgICA6IEdVSUQoKTtcbiAgICAgICg8YW55PmUpW3RoaXMuR1VJRF9LRVldID0gZ3VpZDtcbiAgICAgIHRoaXMuZW50cmllcy5zZXQoZ3VpZCwgZSk7XG4gICAgICB0aGlzLnVwZGF0ZUlERW50cnkoZSk7XG4gICAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBzLnBvc3QoZSk7XG4gICAgICB9KTtcbiAgICAgIC8vQ3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSB0byB0cmlnZ2VyIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgIGxldCB2OiBFW10gPSBbLi4uQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXTtcbiAgICAgIGNvbnN0IGRlbHRhOiBEZWx0YTxFPiA9IHsgdHlwZTogQWN0aW9uVHlwZXMuUE9TVCwgZW50cmllczogW2VdIH07XG4gICAgICB0aGlzLm5vdGlmeUFsbCh2LCBkZWx0YSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5wb3N0QShlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0IGVsZW1lbnRzIHRvIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIC4uLmVcbiAgICogQGV4YW1wbGUgUG9zdCB0d28gYFRvZG9gIGluc3RhbmNlcy5cbmBgYFxuc3RvcmUucG9zdCh0b2RvMSwgdG9kbzIpO1xuYGBgXG4gICAqL1xuICBwb3N0TiguLi5lOiBFW10pIHtcbiAgICBlLmZvckVhY2goZSA9PiB7XG4gICAgICBjb25zdCBndWlkOiBzdHJpbmcgPSAoPGFueT5lKVt0aGlzLkdVSURfS0VZXVxuICAgICAgICA/ICg8YW55PmUpW3RoaXMuR1VJRF9LRVldXG4gICAgICAgIDogR1VJRCgpO1xuICAgICAgKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV0gPSBndWlkO1xuICAgICAgdGhpcy5lbnRyaWVzLnNldChndWlkLCBlKTtcbiAgICAgIHRoaXMudXBkYXRlSURFbnRyeShlKTtcbiAgICB9KTtcbiAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgcy5wb3N0QShlKTtcbiAgICB9KTtcbiAgICAvL0NyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgdG8gdHJpZ2dlciBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgbGV0IHY6IEVbXSA9IFsuLi5BcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSldO1xuICAgIGNvbnN0IGRlbHRhOiBEZWx0YTxFPiA9IHsgdHlwZTogQWN0aW9uVHlwZXMuUE9TVCwgZW50cmllczogZSB9O1xuICAgIHRoaXMubm90aWZ5QWxsKHYsIGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3N0IChBZGQpIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRvIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIGVcbiAgICogQGV4YW1wbGUgUG9zdCBhIGBUb2RvYCBhcnJheS5cbmBgYFxuc3RvcmUucG9zdChbdG9kbzEsIHRvZG8yXSk7XG5gYGBcbiAgICovXG4gIHBvc3RBKGU6IEVbXSkge1xuICAgIHRoaXMucG9zdE4oLi4uZSk7XG4gIH1cblxuICAvKipcbiAgICogUHV0IChVcGRhdGUpIGFuIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBlXG4gICAqIEBleGFtcGxlIFB1dCBhIFRvZG8gaW5zdGFuY2UuXG5gYGBcbnN0b3JlLnB1dCh0b2RvMSk7XG5gYGBcbiAgICovXG4gIHB1dChlOiBFIHwgRVtdKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBsZXQgaWQ6IHN0cmluZyA9ICg8YW55PmUpW3RoaXMuR1VJRF9LRVldO1xuICAgICAgdGhpcy5lbnRyaWVzLnNldChpZCwgZSk7XG4gICAgICB0aGlzLnVwZGF0ZUlERW50cnkoZSk7XG4gICAgICBsZXQgdjogRVtdID0gWy4uLkFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKV07XG4gICAgICB0aGlzLm5vdGlmeS5uZXh0KHYpO1xuICAgICAgY29uc3QgZGVsdGE6IERlbHRhPEU+ID0geyB0eXBlOiBBY3Rpb25UeXBlcy5QVVQsIGVudHJpZXM6IFtlXSB9O1xuICAgICAgdGhpcy5ub3RpZnlEZWx0YS5uZXh0KGRlbHRhKTtcbiAgICAgIEFycmF5LmZyb20odGhpcy5zbGljZXMudmFsdWVzKCkpLmZvckVhY2gocyA9PiB7XG4gICAgICAgIHMucHV0KGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5wdXRBKGUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFB1dCAoVXBkYXRlKSBhbiBlbGVtZW50IG9yIGFkZCBhbiBlbGVtZW50IHRoYXQgd2FzIHJlYWQgZnJvbSBhIHBlcnNpc3RlbmNlIHNvdXJjZVxuICAgKiBhbmQgdGh1cyBhbHJlYWR5IGhhcyBhbiBhc3NpZ25lZCBnbG9iYWwgaWRgLlxuICAgKiBAcGFyYW0gZVxuICAgKiBAZXhhbXBsZSBQdXQgVG9kbyBpbnN0YW5jZXMuXG5gYGBcbnN0b3JlLnB1dCh0b2RvMSwgdG9kbzIpO1xuYGBgXG4gICAqL1xuICBwdXROKC4uLmU6IEVbXSkge1xuICAgIHRoaXMucHV0QShlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQdXQgKFVwZGF0ZSkgdGhlIGFycmF5IG9mIGVsZW1lbnRzLlxuICAgKiBAcGFyYW0gZVxuICAgKiBAZXhhbXBsZSBQdXQgVG9kbyBpbnN0YW5jZXMuXG5gYGBcbnN0b3JlLnB1dChbdG9kbzEsIHRvZG8yXSk7XG5gYGBcbiAgICovXG4gIHB1dEEoZTogRVtdKSB7XG4gICAgZS5mb3JFYWNoKGUgPT4ge1xuICAgICAgbGV0IGd1aWQ6IHN0cmluZyA9ICg8YW55PmUpW3RoaXMuR1VJRF9LRVldXG4gICAgICB0aGlzLmVudHJpZXMuc2V0KGd1aWQsIGUpXG4gICAgICB0aGlzLnVwZGF0ZUlERW50cnkoZSk7XG4gICAgfSk7XG4gICAgLy9DcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIGxldCB2OiBFW10gPSBbLi4uQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXTtcbiAgICB0aGlzLm5vdGlmeS5uZXh0KHYpO1xuICAgIGNvbnN0IGRlbHRhOiBEZWx0YTxFPiA9IHsgdHlwZTogQWN0aW9uVHlwZXMuUFVULCBlbnRyaWVzOiBlIH07XG4gICAgdGhpcy5ub3RpZnlEZWx0YS5uZXh0KGRlbHRhKTtcbiAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgcy5wdXRBKGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSAoVXBkYXRlKSB0aGUgYXJyYXkgb2YgZWxlbWVudHMuXG4gICAqIEBwYXJhbSBlXG4gICAqIEBleGFtcGxlIERlbGV0ZSB0b2RvMS5cbmBgYFxuc3RvcmUuZGVsZXRlKHRvZG8xXSk7XG5gYGBcbiAgICovXG4gIGRlbGV0ZShlOiBFIHwgRVtdKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICB0aGlzLmRlbGV0ZUFjdGl2ZShlKTtcbiAgICAgIGNvbnN0IGd1aWQgPSAoPGFueT5lKVt0aGlzLkdVSURfS0VZXTtcbiAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoZ3VpZCk7XG4gICAgICB0aGlzLmRlbGV0ZUlERW50cnkoZSk7XG4gICAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBzLmVudHJpZXMuZGVsZXRlKGd1aWQpO1xuICAgICAgfSk7XG4gICAgICAvL0NyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgdG8gdHJpZ2dlciBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICBsZXQgdjogRVtdID0gWy4uLkFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKV07XG4gICAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURSwgZW50cmllczogW2VdIH07XG4gICAgICB0aGlzLm5vdGlmeUFsbCh2LCBkZWx0YSk7XG4gICAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBzLmRlbGV0ZShlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuZGVsZXRlQShlKVxuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBOIGVsZW1lbnRzLlxuICAgKiBAcGFyYW0gLi4uZVxuICAgKiBAZXhhbXBsZSBQdXQgVG9kbyBpbnN0YW5jZXMuXG5gYGBcbnN0b3JlLmRlbGV0ZSh0b2RvMSwgdG9kbzIpO1xuYGBgXG4gICAqL1xuICBkZWxldGVOKC4uLmU6IEVbXSkge1xuICAgIHRoaXMuZGVsZXRlQShlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgTiBlbGVtZW50cy5cbiAgICogQHBhcmFtIC4uLmVcbiAgICogQGV4YW1wbGUgUHV0IFRvZG8gaW5zdGFuY2VzLlxuYGBgXG5zdG9yZS5kZWxldGUodG9kbzEsIHRvZG8yKTtcbmBgYFxuICAgKi9cbiAgZGVsZXRlQShlOiBFW10pIHtcbiAgICBlLmZvckVhY2goZSA9PiB7XG4gICAgICB0aGlzLmRlbGV0ZUFjdGl2ZShlKTtcbiAgICAgIGNvbnN0IGd1aWQgPSAoPGFueT5lKVt0aGlzLkdVSURfS0VZXTtcbiAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoZ3VpZCk7XG4gICAgICB0aGlzLmRlbGV0ZUlERW50cnkoZSk7XG4gICAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBzLmVudHJpZXMuZGVsZXRlKGd1aWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy9DcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIGxldCB2OiBFW10gPSBbLi4uQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXTtcbiAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURSwgZW50cmllczogZSB9O1xuICAgIHRoaXMubm90aWZ5QWxsKHYsIGRlbHRhKTtcbiAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgcy5kZWxldGVBKGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBlbGVtZW50cyBieSB7QGxpbmsgUHJlZGljYXRlfS5cbiAgICogQHBhcmFtIHAgVGhlIHByZWRpY2F0ZS5cbiAgICogQGV4YW1wbGUgUHV0IFRvZG8gaW5zdGFuY2VzLlxuYGBgXG5zdG9yZS5kZWxldGUodG9kbzEsIHRvZG8yKTtcbmBgYFxuICAgKi9cbiAgZGVsZXRlUChwOiBQcmVkaWNhdGU8RT4pIHtcbiAgICBjb25zdCBkOiBFW10gPSBbXTtcbiAgICBBcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSkuZm9yRWFjaChlID0+IHtcbiAgICAgIGlmIChwKGUpKSB7XG4gICAgICAgIGQucHVzaChlKTtcbiAgICAgICAgY29uc3QgaWQgPSAoPGFueT5lKVt0aGlzLkdVSURfS0VZXTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLmRlbGV0ZShpZCk7XG4gICAgICAgIHRoaXMuZGVsZXRlQWN0aXZlKGUpO1xuICAgICAgICB0aGlzLmRlbGV0ZUlERW50cnkoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy9DcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIGxldCB2OiBFW10gPSBbLi4uQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXTtcbiAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLkRFTEVURSwgZW50cmllczogZCB9O1xuICAgIHRoaXMubm90aWZ5QWxsKHYsIGRlbHRhKTtcbiAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgcy5kZWxldGVBKGQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBlbnRpdHkgaGFzIHRoZSBgaWRgIGtleSBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUsXG4gICAqIHRoZW4gYWxzbyBhZGQgdGhlIGVudGl0eSB0byB0aGUgYGlkRW50cmllc2AuXG4gICAqXG4gICAqIEBwYXJhbSBlIFRoZSBlbGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgaWRFbnRyaWVzYC5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSURFbnRyeShlOiBFKSB7XG4gICAgaWYgKCg8YW55PmUpW3RoaXMuSURfS0VZXSkge1xuICAgICAgdGhpcy5pZEVudHJpZXMuc2V0KCg8YW55PmUpW3RoaXMuSURfS0VZXSwgZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBlbnRpdHkgaGFzIHRoZSBgaWRgIGtleSBpbml0aWFsaXplZCB3aXRoIGEgdmFsdWUsXG4gICAqIHRoZW4gYWxzbyBkZWxldGUgdGhlIGVudGl0eSB0byB0aGUgYGlkRW50cmllc2AuXG4gICAqXG4gICAqIEBwYXJhbSBlIFRoZSBlbGVtZW50IHRvIGJlIGFkZGVkIHRvIHRoZSBgaWRFbnRyaWVzYC5cbiAgICovXG4gIHByaXZhdGUgZGVsZXRlSURFbnRyeShlOiBFKSB7XG4gICAgaWYgKCg8YW55PmUpW3RoaXMuSURfS0VZXSkge1xuICAgICAgdGhpcy5pZEVudHJpZXMuZGVsZXRlKCg8YW55PmUpW3RoaXMuSURfS0VZXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmUgYW5kIGFsbCBjb250YWluZWQgc2xpY2UgaW5zdGFuY2VzIHRvIGVtcHR5LlxuICAgKiBBbHNvIHBlcmZvcm0gZGVsdGEgbm90aWZpY2F0aW9uIHRoYXQgc2VuZHMgYWxsIGN1cnJlbnQgc3RvcmUgZW50cmllcy5cbiAgICogVGhlIEFjdGlvblR5cGUuUkVTRVQgY29kZSBpcyBzZW50IHdpdGggdGhlIGRlbHRhIG5vdGlmaWNhdGlvbi4gIFNsaWNlc1xuICAgKiBzZW5kIHRoZWlyIG93biBkZWx0YSBub3RpZmljYXRpb24uXG4gICAqIFxuICAgKiBAZXhhbXBsZSBSZXNldCB0aGUgc3RvcmUuXG5gYGBcbnN0b3JlLnJlc2V0KCk7XG5gYGBcbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGRlbHRhOiBEZWx0YTxFPiA9IHtcbiAgICAgIHR5cGU6IEFjdGlvblR5cGVzLlJFU0VULFxuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXG4gICAgfTtcbiAgICB0aGlzLm5vdGlmeUFsbChbXSwgZGVsdGEpO1xuICAgIHRoaXMuZW50cmllcyA9IG5ldyBNYXAoKTtcbiAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgcy5yZXNldCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgYWxsIHRoZSBub3RpZmllcnMgYXQgb25jZS5cbiAgICpcbiAgICogQHBhcmFtIHZcbiAgICogQHBhcmFtIGRlbHRhXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5QWxsKHY6IEVbXSwgZGVsdGE6IERlbHRhPEU+KSB7XG4gICAgc3VwZXIubm90aWZ5QWxsKHYsIGRlbHRhKTtcbiAgICB0aGlzLm5vdGlmeUxvYWRpbmcubmV4dCh0aGlzLmxvYWRpbmcpO1xuICB9XG59Il19
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRVN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2xpY2Uvc3JjL2xpYi9FU3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxNQUFNLE9BQU8sTUFBVSxTQUFRLGFBQWdCO0lBQzdDOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsWUFBWSxXQUFnQixFQUFFLEVBQUUsTUFBb0I7UUFDbEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBNENoQjs7V0FFRztRQUNLLGlCQUFZLEdBQUcsSUFBSSxhQUFhLENBQWlCLENBQUMsQ0FBQyxDQUFDO1FBRzVEOzs7O1dBSUc7UUFDSSxXQUFNLEdBQW1CLElBQUksR0FBRyxFQUFFLENBQUM7UUE2RjFDOzs7OztXQUtHO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBVSxDQUFDLENBQUMsQ0FBQztRQUV0RDs7Ozs7Ozs7OztXQVVHO1FBQ0ssYUFBUSxHQUFZLElBQUksQ0FBQztRQStEakM7Ozs7O1dBS0c7UUFDSyxvQkFBZSxHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXhEOzs7OztXQUtHO1FBQ0ssZUFBVSxHQUFZLEtBQUssQ0FBQztRQStDcEM7O1dBRUc7UUFDSyxXQUFNLEdBQTBCLElBQUksR0FBRyxFQUFFLENBQUM7UUFyU2hELE1BQU0sS0FBSyxH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QWJzdHJhY3RTdG9yZSc7XG5pbXBvcnQgeyBTdG9yZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL1N0b3JlQ29uZmlnJztcbmltcG9ydCB7IEdVSUQgfSBmcm9tICcuL3V0aWxpdGllcyc7XG5cbmltcG9ydCB7IEFjdGlvblR5cGVzLCBQcmVkaWNhdGUsIERlbHRhIH0gZnJvbSAnLi9tb2RlbHMvJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIG9mLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlV2hpbGUsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2xpY2UgfSBmcm9tICcuL1NsaWNlJztcblxuLyoqXG4gKiBUaGlzIGB0b2RvRmFjdG9yeWAgY29kZSB3aWxsIGJlIHVzZWQgdG8gaWxsdXN0cmF0ZSB0aGUgQVBJIGV4YW1wbGVzLiAgVGhlIGZvbGxvd2luZ1xuICogdXRpbGl0aWVzIGFyZSB1c2VkIGluIHRoZSB0ZXN0cyBhbmQgdGhlIEFQSSBUeXBlZG9jIGV4YW1wbGVzIGNvbnRhaW5lZCBoZXJlLlxuICogQGV4YW1wbGUgVXRpbGl0aWVzIGZvciBBUEkgRXhhbXBsZXNcbmBgYFxuZXhwb3J0IGNvbnN0IGVudW0gVG9kb1NsaWNlRW51bSB7XG4gIENPTVBMRVRFID0gXCJDb21wbGV0ZVwiLFxuICBJTkNPTVBMRVRFID0gXCJJbmNvbXBsZXRlXCJcbn1cblxuZXhwb3J0IGNsYXNzIFRvZG8ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tcGxldGU6IGJvb2xlYW4sIHB1YmxpYyB0aXRsZTogc3RyaW5nLHB1YmxpYyBnaWQ/OnN0cmluZywgcHVibGljIGlkPzpzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBsZXQgdG9kb3MgPSBbbmV3IFRvZG8oZmFsc2UsIFwiWW91IGNvbXBsZXRlIG1lIVwiKSwgbmV3IFRvZG8odHJ1ZSwgXCJZb3UgY29tcGxldGVkIG1lIVwiKV07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b2Rvc0ZhY3RvcnkoKTpUb2RvW10ge1xuICByZXR1cm4gW25ldyBUb2RvKGZhbHNlLCBcIllvdSBjb21wbGV0ZSBtZSFcIiksIG5ldyBUb2RvKHRydWUsIFwiWW91IGNvbXBsZXRlZCBtZSFcIildO1xufVxuIGBgYCBcbiAqL1xuXG5leHBvcnQgY2xhc3MgRVN0b3JlPEU+IGV4dGVuZHMgQWJzdHJhY3RTdG9yZTxFPiB7XG4gIC8qKlxuICAgKiBTdG9yZSBjb25zdHJ1Y3RvciAoSW5pdGlhbGl6YXRpb24gd2l0aCBlbGVtZW50IGlzIG9wdGlvbmFsKVxuICAgKlxuICAgKiBwZXJmb3JtIGluaXRpYWwgbm90aWZpY2F0aW9uIHRvIGFsbCBvYnNlcnZlcnMsXG4gICAqIHN1Y2ggdGhhdCBmdW5jdGlvbiBsaWtlIHtAbGluayBjb21iaW5lTGF0ZXN0fXt9XG4gICAqIHdpbGwgZXhlY3V0ZSBhdCBsZWFzdCBvbmNlLlxuICAgKiBAcGFyYW0gZW50aXRpZXNcbiAgICogQGV4YW1wbGUgRHluYW1pYyBgRVN0b3JlPFRvZG8+YCBDcmVhdGlvbiBcbmBgYFxuLy8gSW5pdGlhbGl6ZSB0aGUgU3RvcmVcbmxldCBzdG9yZTogRVN0b3JlPFRvZG8+ID0gbmV3IEVTdG9yZTxUb2RvPih0b2Rvc0ZhY3RvcnkoKSk7XG5gYGAqL1xuICBjb25zdHJ1Y3RvcihlbnRpdGllczogRVtdID0gW10sIGNvbmZpZz86IFN0b3JlQ29uZmlnKSB7XG4gICAgc3VwZXIoY29uZmlnKTtcbiAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLklOVElBTElaRSwgZW50cmllczogZW50aXRpZXMgfTtcbiAgICB0aGlzLnBvc3QoZW50aXRpZXMpXG4gICAgdGhpcy5ub3RpZnlEZWx0YS5uZXh0KGRlbHRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBjb21wbGV0ZSBvbiBhbGwge0BsaW5rIEJlaGF2aW9yU3ViamVjdH0gaW5zdGFuY2VzLlxuICAgKiBcbiAgICogQ2FsbCBkZXN0cm95IHdoZW4gZGlzcG9zaW5nIG9mIHRoZSBzdG9yZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpXG4gICAgdGhpcy5ub3RpZnlMb2FkaW5nLmNvbXBsZXRlKClcbiAgICB0aGlzLm5vdGlmeUFjdGl2ZS5jb21wbGV0ZSgpXG4gICAgdGhpcy5zbGljZXMuZm9yRWFjaChzbGljZSA9PiBzbGljZS5kZXN0cm95KCkpXG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgZW50aXR5OlxuICAgKiBcbiAgICogSWYgdGhlIHN0b3JlIGNvbnRhaW5zIHRoZSBlbnRpdHlcbiAgICogaXQgd2lsbCBiZSBkZWxldGVkLiAgSWYgdGhlIHN0b3JlIFxuICAgKiBkb2VzIG5vdCBjb250YWlucyB0aGUgZW50aXR5LFxuICAgKiBpdCBpcyBhZGRlZC5cbiAgICogQHBhcmFtIGUgXG4gICAqIEBleGFtcGxlIFRvZ2dsZSB0aGUgYFRvZG9gIGluc3RhbmNlXG5gYGBcbmVzdG9yZS5wb3N0KHRvZG8pO1xuLy8gUmVtb3ZlIHRvZG9cbmVzdG9yZS50b2dnbGUodG9kbyk7XG4vLyBBZGQgaXQgYmFja1xuZXN0b3JlLnRvZ2dsZSh0b2RvKTtcblxuYGBgXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlKGU6IEUpIHtcbiAgICBpZiAodGhpcy5jb250YWlucyhlKSkge1xuICAgICAgdGhpcy5kZWxldGUoZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9zdChlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTm90aWZpZXMgb2JzZXJ2ZXJzIHdoZW4gdGhlIHN0b3JlIGlzIGVtcHR5LlxuICAgKi9cbiAgcHJpdmF0ZSBub3RpZnlBY3RpdmUgPSBuZXcgUmVwbGF5U3ViamVjdDxNYXA8c3RyaW5nLCBFPj4oMSk7XG5cblxuICAvKipcbiAgICogYE1hcGAgb2YgYWN0aXZlIGVudHRpZXMuIFRoZSBpbnN0YW5jZSBpcyBwdWJsaWMgYW5kIGNhbiBiZSB1c2VkXG4gICAqIGRpcmVjdGx5IHRvIGFkZCBhbmQgcmVtb3ZlIGFjdGl2ZSBlbnRpdGllcywgaG93ZXZlciB3ZSByZWNvbW1lbmRcbiAgICogdXNpbmcgdGhlIHtAbGluayBhZGRBY3RpdmV9IGFuZCB7QGxpbmsgZGVsZXRlQWN0aXZlfSBtZXRob2RzLlxuICAgKi9cbiAgcHVibGljIGFjdGl2ZTogTWFwPHN0cmluZywgRT4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSBlbnRpdHkgZW50aXRpZXMgdG8gYWN0aXZlLlxuICAgKiBcbiAgICogSWYgdGhlIGVudGl0eSBpcyBub3QgY29udGFpbmVkIGluIHRoZSBzdG9yZSBpdCBpcyBhZGRlZFxuICAgKiB0byB0aGUgc3RvcmUgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIGBhY3RpdmVgLlxuICAgKiBcbiAgICogQWxzbyB3ZSBjbG9uZSB0aGUgbWFwIHByaW9yIHRvIGJyb2FkY2FzdGluZyBpdCB3aXRoXG4gICAqIGBub3RpZnlBY3RpdmVgIHRvIG1ha2Ugc3VyZSB3ZSB3aWxsIHRyaWdnZXIgQW5ndWxhciBcbiAgICogY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgZXZlbnQgdGhhdCBpdCBtYWludGFpbnMgXG4gICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBgYWN0aXZlYCBzdGF0ZSBgTWFwYCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBleGFtcGxlIEFkZCBhIGB0b2RvMWAgYW5kIGB0b2RvMmAgYXMgYWN0aXZlXG5gYGBcbmFkZEFjdGl2ZSh0b2RvMSk7XG5hZGRBY3RpdmUodG9kbzIpO1xuYGBgXG4gICAqL1xuICBwdWJsaWMgYWRkQWN0aXZlKGU6IEUpIHtcbiAgICBpZiAodGhpcy5jb250YWlucyhlKSkge1xuICAgICAgdGhpcy5hY3RpdmUuc2V0KCg8YW55PmUpLmdpZCwgZSk7XG4gICAgICB0aGlzLm5vdGlmeUFjdGl2ZS5uZXh0KG5ldyBNYXAodGhpcy5hY3RpdmUpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnBvc3QoZSk7XG4gICAgICB0aGlzLmFjdGl2ZS5zZXQoKDxhbnk+ZSkuZ2lkLCBlKTtcbiAgICAgIHRoaXMubm90aWZ5QWN0aXZlLm5leHQobmV3IE1hcCh0aGlzLmFjdGl2ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYW4gZW50aXR5IGFzIGFjdGl2ZS5cbiAgICogXG4gICAqIEFsc28gd2UgY2xvbmUgdGhlIG1hcCBwcmlvciB0byBicm9hZGNhc3RpbmcgaXQgd2l0aFxuICAgKiBgbm90aWZ5QWN0aXZlYCB0byBtYWtlIHN1cmUgd2Ugd2lsbCB0cmlnZ2VyIEFuZ3VsYXIgXG4gICAqIGNoYW5nZSBkZXRlY3Rpb24gaW4gdGhlIGV2ZW50IHRoYXQgaXQgbWFpbnRhaW5zIFxuICAgKiBhIHJlZmVyZW5jZSB0byB0aGUgYGFjdGl2ZWAgc3RhdGUgYE1hcGAgaW5zdGFuY2UuXG4gICAqIFxuICAgKiBAZXhhbXBsZSBNYXJrIGEgYHRvZG9gIGluc3RhbmNlIGFzIGFjdGl2ZVxuICBgYGBcbmRlbGV0ZUFjdGl2ZSh0b2RvMSk7XG5kZWxldGVBY3RpdmUodG9kbzIpO1xuICBgYGBcbiAgICovXG4gIHB1YmxpYyBkZWxldGVBY3RpdmUoZTogRSkge1xuICAgIHRoaXMuYWN0aXZlLmRlbGV0ZSgoPGFueT5lKS5naWQpO1xuICAgIHRoaXMubm90aWZ5QWN0aXZlLm5leHQobmV3IE1hcCh0aGlzLmFjdGl2ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIC8gcmVzZXQgdGhlIGFjdGl2ZSBlbnRpdHkgbWFwLlxuICAgKiBcbiAgICogQWxzbyB3ZSBjbG9uZSB0aGUgbWFwIHByaW9yIHRvIGJyb2FkY2FzdGluZyBpdCB3aXRoXG4gICAqIGBub3RpZnlBY3RpdmVgIHRvIG1ha2Ugc3VyZSB3ZSB3aWxsIHRyaWdnZXIgQW5ndWxhciBcbiAgICogY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgZXZlbnQgdGhhdCBpdCBtYWludGFpbnMgXG4gICAqIGEgcmVmZXJlbmNlIHRvIHRoZSBgYWN0aXZlYCBzdGF0ZSBgTWFwYCBpbnN0YW5jZS5cbiAgICogXG4gICAqIEBleGFtcGxlIE1hcmsgYSBgdG9kb2AgaW5zdGFuY2UgYXMgYWN0aXZlXG4gIGBgYFxuZGVsZXRlQWN0aXZlKHRvZG8xKTtcbmRlbGV0ZUFjdGl2ZSh0b2RvMik7XG4gIGBgYFxuICAgKi9cbiAgY2xlYXJBY3RpdmUoKSB7XG4gICAgdGhpcy5hY3RpdmUuY2xlYXIoKTtcbiAgICB0aGlzLm5vdGlmeUFjdGl2ZS5uZXh0KG5ldyBNYXAodGhpcy5hY3RpdmUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZlIHRoZSBhY3RpdmUgZW50aXR5LlxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgIGxldCBhY3RpdmUkID0gc291cmNlLm9ic2VydmVBY3RpdmUoKTtcbiAgICA8L3ByZT5cbiAgKi9cbiAgcHVibGljIG9ic2VydmVBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5QWN0aXZlLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExPQURJTkdcbiAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIGEgbG9hZCByZXF1ZXN0LlxuICAgKiBcbiAgICogVGhlIGVycm9yIE9ic2VydmFibGUgc2hvdWxkIGJlIGNyZWF0ZWQgYnkgdGhlIFxuICAgKiBjbGllbnQuXG4gICAqL1xuICBwdWJsaWMgbG9hZGluZ0Vycm9yITogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIC8qKlxuICAgKiBOb3RpZmllcyBvYnNlcnZlcnMgd2hlbiB0aGUgc3RvcmUgaXMgbG9hZGluZy5cbiAgICogXG4gICAqIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBmb3VuZCB3aGVuIGltcGxlbWVudGluZ1xuICAgKiBgT2JzZXJ2YWJsZWAgZGF0YSBzb3VyY2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBub3RpZnlMb2FkaW5nID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGxvYWRpbmcgc3RhdGUuICBVc2UgbG9hZGluZyB3aGVuIGZldGNoaW5nIG5ld1xuICAgKiBkYXRhIGZvciB0aGUgc3RvcmUuICBUaGUgZGVmYXVsdCBsb2FkaW5nIHN0YXRlIGlzIGB0cnVlYC5cbiAgICogXG4gICAqIFRoaXMgaXMgc3VjaCB0aGF0IGlmIGRhdGEgaXMgZmV0Y2hlZCBhc3luY2hyb25vdXNseSBcbiAgICogaW4gYSBzZXJ2aWNlLCBjb21wb25lbnRzIGNhbiB3YWl0IG9uIGxvYWRpbmcgbm90aWZpY2F0aW9uXG4gICAqIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHJldHJpZXZlIGRhdGEgZnJvbSB0aGUgc2VydmljZS5cbiAgICpcbiAgICogTG9hZGluZyBjb3VsZCBiZSBiYXNlZCBvbiBhIGNvbXBvc2l0ZSByZXNwb25zZS4gIEZvciBleGFtcGxlXG4gICAqIHdoZW4gdGhlIHN0b2NrIGFuZCBtdXR1YWwgZnVuZHMgaGF2ZSBsb2FkZWQsIHNldCBsb2FkaW5nIHRvIGBmYWxzZWAuXG4gICAqL1xuICBwcml2YXRlIF9sb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudCBsb2FkaW5nIHN0YXRlIGFuZCBub3RpZmllcyBvYnNlcnZlcnMuXG4gICAqL1xuICBzZXQgbG9hZGluZyhsb2FkaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5fbG9hZGluZyA9IGxvYWRpbmc7XG4gICAgdGhpcy5ub3RpZnlMb2FkaW5nLm5leHQodGhpcy5fbG9hZGluZyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBBIHNuYXBzaG90IG9mIHRoZSBsb2FkaW5nIHN0YXRlLlxuICAgKi9cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSBsb2FkaW5nLlxuICAgKiBAZXhhbXBsZVxuICAgICA8cHJlPlxuICAgIGxldCBsb2FkaW5nJCA9IHNvdXJjZS5vYnNlcnZlTG9hZGluZygpO1xuICAgIDwvcHJlPlxuXG4gICAgTm90ZSB0aGF0IHRoaXMgb2J2ZXJhYmxlIHBpcGVkIHRocm91Z2hcbiAgICBgdGFrZVdoaWxlKHYtPnYsIHRydWUpLCBzdWNoIHRoYXQgaXQgd2lsbCBcbiAgICBjb21wbGV0ZSBhZnRlciBlYWNoIGVtaXNzaW9uLlxuXG4gICAgU2VlOlxuICAgIGh0dHBzOi8vbWVkaXVtLmNvbS9Ab2xlLmVyc295L3dhaXRpbmctb24tZXN0b3JlLXRvLWxvYWQtOGRjYmUxNjE2MTNjXG5cbiAgICBGb3IgbW9yZSBkZXRhaWxzLlxuICAqL1xuICBwdWJsaWMgb2JzZXJ2ZUxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubm90aWZ5TG9hZGluZy5hc09ic2VydmFibGUoKS5cbiAgICAgIHBpcGUodGFrZVdoaWxlKHYgPT4gdiwgdHJ1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGZpaWVzIHdoZW4gbG9hZGluZyBoYXMgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIG9ic2VydmVMb2FkaW5nQ29tcGxldGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JzZXJ2ZUxvYWRpbmcoKS5waXBlKFxuICAgICAgZmlsdGVyKGxvYWRpbmcgPT4gbG9hZGluZyA9PSBmYWxzZSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2YodHJ1ZSkpKVxuICB9XG5cblxuXG5cblxuXG4gIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNFQVJDSElOR1xuICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIGEgc2VhcmNoIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGUgZXJyb3IgT2JzZXJ2YWJsZSBzaG91bGQgYmUgY3JlYXRlZCBieSB0aGUgXG4gICAqIGNsaWVudC5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2hFcnJvciE6IE9ic2VydmFibGU8YW55PjtcblxuICAvKipcbiAgICogTm90aWZpZXMgb2JzZXJ2ZXJzIHRoYXQgYSBzZWFyY2ggaXMgaW4gcHJvZ3Jlc3MuXG4gICAqIFxuICAgKiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm91bmQgd2hlbiBpbXBsZW1lbnRpbmdcbiAgICogYE9ic2VydmFibGVgIGRhdGEgc291cmNlcy5cbiAgICovXG4gIHByaXZhdGUgbm90aWZ5U2VhcmNoaW5nID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IGBzZWFyY2hpbmdgIHN0YXRlLiAgVXNlIGBzZWFyY2hpbmdgXG4gICAqIGZvciBleGFtcGxlIHRvIGRpc3BsYXkgYSBzcGlubm5lciBcbiAgICogd2hlbiBwZXJmb3JtaW5nIGEgc2VhcmNoLiAgXG4gICAqIFRoZSBkZWZhdWx0IGBzZWFyY2hpbmdgIHN0YXRlIGlzIGBmYWxzZWAuXG4gICAqL1xuICBwcml2YXRlIF9zZWFyY2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgY3VycmVudCBzZWFyY2hpbmcgc3RhdGUgYW5kIG5vdGlmaWVzIG9ic2VydmVycy5cbiAgICovXG4gIHNldCBzZWFyY2hpbmcoc2VhcmNoaW5nOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VhcmNoaW5nID0gc2VhcmNoaW5nO1xuICAgIHRoaXMubm90aWZ5U2VhcmNoaW5nLm5leHQodGhpcy5fc2VhcmNoaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIEEgc25hcHNob3Qgb2YgdGhlIHNlYXJjaGluZyBzdGF0ZS5cbiAgICovXG4gIGdldCBzZWFyY2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaGluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnNlcnZlIHNlYXJjaGluZy5cbiAgICogQGV4YW1wbGVcbiAgICAgPHByZT5cbiAgICBsZXQgc2VhcmNoaW5nJCA9IHNvdXJjZS5vYnNlcnZlU2VhcmNoaW5nKCk7XG4gICAgPC9wcmU+XG4gIFxuICAgIE5vdGUgdGhhdCB0aGlzIG9idmVyYWJsZSBwaXBlZCB0aHJvdWdoXG4gICAgYHRha2VXaGlsZSh2LT52LCB0cnVlKSwgc3VjaCB0aGF0IGl0IHdpbGwgXG4gICAgY29tcGxldGUgYWZ0ZXIgZWFjaCBlbWlzc2lvbi5cbiAgXG4gICAgU2VlOlxuICAgIGh0dHBzOi8vbWVkaXVtLmNvbS9Ab2xlLmVyc295L3dhaXRpbmctb24tZXN0b3JlLXRvLWxvYWQtOGRjYmUxNjE2MTNjXG4gIFxuICAgIEZvciBtb3JlIGRldGFpbHMuXG4gICovXG4gIHB1YmxpYyBvYnNlcnZlU2VhcmNoaW5nKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm5vdGlmeVNlYXJjaGluZy5hc09ic2VydmFibGUoKS5cbiAgICAgIHBpcGUodGFrZVdoaWxlKHYgPT4gdiwgdHJ1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGZpaWVzIHdoZW4gc2VhcmNoaW5nIGhhcyBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZVNlYXJjaGluZ0NvbXBsZXRlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm9ic2VydmVTZWFyY2hpbmcoKS5waXBlKFxuICAgICAgZmlsdGVyKHNlYXJjaGluZyA9PiBzZWFyY2hpbmcgPT0gZmFsc2UpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IG9mKHRydWUpKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBzbGljZXNcbiAgICovXG4gIHByaXZhdGUgc2xpY2VzOiBNYXA8c3RyaW5nLCBTbGljZTxFPj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzbGljZSB0byB0aGUgc3RvcmUgYW5kIGtleXMgaXQgYnkgdGhlIHNsaWNlcyBsYWJlbC5cbiAgICpcbiAgICogQHBhcmFtIHBcbiAgICogQHBhcmFtIGxhYmVsXG4gICAqIFxuICAgKiBAZXhhbXBsZSBTZXR1cCBhIFRvZG8gU2xpY2UgZm9yIENPTVBMRVRFIFRvZG9zXG5gYGBcbnNvdXJjZS5hZGRTbGljZSh0b2RvID0+IHRvZG8uY29tcGxldGUsIFRvZG9TbGljZXMuQ09NUExFVEUpO1xuYGBgXG4gICAqL1xuICBhZGRTbGljZShwOiBQcmVkaWNhdGU8RT4sIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzbGljZTogU2xpY2U8RT4gPSBuZXcgU2xpY2UoXG4gICAgICBsYWJlbCxcbiAgICAgIHAsXG4gICAgICB0aGlzKVxuICAgIHRoaXMuc2xpY2VzLnNldChzbGljZS5sYWJlbCwgc2xpY2UpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc2xpY2VcbiAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCBpZGVudGlmeWluZyB0aGUgc2xpY2VcbiAgICogXG4gICAqIEBleGFtcGxlIFJlbW92ZSB0aGUgVG9kb1NsaWNlcy5DT01QTEVURSBTbGljZVxuYGBgXG5zb3VyY2UucmVtb3ZlU2xpY2UoVG9kb1NsaWNlcy5DT01QTEVURSk7XG5gYGBcbiAgICovXG4gIHJlbW92ZVNsaWNlKGxhYmVsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNsaWNlcy5kZWxldGUobGFiZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNsaWNlXG4gICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgaWRlbnRpZnlpbmcgdGhlIHNsaWNlXG4gICAqIEByZXR1cm4gVGhlIFNsaWNlIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBcbiAgICogXG4gICAqIEBleGFtcGxlIEdldCB0aGUgVG9kb1NsaWNlcy5DT01QTEVURSBzbGljZVxuYGBgXG5zb3VyY2UuZ2V0U2xpY2UoVG9kb1NsaWNlcy5DT01QTEVURSk7XG5gYGBcbiAgICovXG4gIGdldFNsaWNlKGxhYmVsOiBzdHJpbmcpOiBTbGljZTxFPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc2xpY2VzLmdldChsYWJlbCk7XG4gIH1cblxuICAvKipcbiAgICogUG9zdCAoQWRkIGEgbmV3KSBlbGVtZW50KHMpIHRvIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIGUgQW4gaW5kaWlkdWFsIGVudGl0eSBvciBhbiBhcnJheSBvZiBlbnRpdGllc1xuICAgKiBAZXhhbXBsZSBQb3N0IGEgYHRvZG9gLlxuYGBgXG5zdG9yZS5wb3N0KHRvZG8pO1xuYGBgXG4gICAqL1xuICBwb3N0KGU6IEUgfCBFW10pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgIGNvbnN0IGd1aWQ6IHN0cmluZyA9ICg8YW55PmUpW3RoaXMuR1VJRF9LRVldXG4gICAgICAgID8gKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV1cbiAgICAgICAgOiBHVUlEKCk7XG4gICAgICAoPGFueT5lKVt0aGlzLkdVSURfS0VZXSA9IGd1aWQ7XG4gICAgICB0aGlzLmVudHJpZXMuc2V0KGd1aWQsIGUpO1xuICAgICAgdGhpcy51cGRhdGVJREVudHJ5KGUpO1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgICAgcy5wb3N0KGUpO1xuICAgICAgfSk7XG4gICAgICAvL0NyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgdG8gdHJpZ2dlciBBbmd1bGFyIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICBsZXQgdjogRVtdID0gWy4uLkFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKV07XG4gICAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLlBPU1QsIGVudHJpZXM6IFtlXSB9O1xuICAgICAgdGhpcy5ub3RpZnlBbGwodiwgZGVsdGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucG9zdEEoZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zdCBlbGVtZW50cyB0byB0aGUgc3RvcmUuXG4gICAqIEBwYXJhbSAuLi5lXG4gICAqIEBleGFtcGxlIFBvc3QgdHdvIGBUb2RvYCBpbnN0YW5jZXMuXG5gYGBcbnN0b3JlLnBvc3QodG9kbzEsIHRvZG8yKTtcbmBgYFxuICAgKi9cbiAgcG9zdE4oLi4uZTogRVtdKSB7XG4gICAgZS5mb3JFYWNoKGUgPT4ge1xuICAgICAgY29uc3QgZ3VpZDogc3RyaW5nID0gKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV1cbiAgICAgICAgPyAoPGFueT5lKVt0aGlzLkdVSURfS0VZXVxuICAgICAgICA6IEdVSUQoKTtcbiAgICAgICg8YW55PmUpW3RoaXMuR1VJRF9LRVldID0gZ3VpZDtcbiAgICAgIHRoaXMuZW50cmllcy5zZXQoZ3VpZCwgZSk7XG4gICAgICB0aGlzLnVwZGF0ZUlERW50cnkoZSk7XG4gICAgfSk7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgIHMucG9zdEEoZSk7XG4gICAgfSk7XG4gICAgLy9DcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgIGxldCB2OiBFW10gPSBbLi4uQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpXTtcbiAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLlBPU1QsIGVudHJpZXM6IGUgfTtcbiAgICB0aGlzLm5vdGlmeUFsbCh2LCBkZWx0YSk7XG4gIH1cblxuICAvKipcbiAgICogUG9zdCAoQWRkKSBhbiBhcnJheSBvZiBlbGVtZW50cyB0byB0aGUgc3RvcmUuXG4gICAqIEBwYXJhbSBlXG4gICAqIEBleGFtcGxlIFBvc3QgYSBgVG9kb2AgYXJyYXkuXG5gYGBcbnN0b3JlLnBvc3QoW3RvZG8xLCB0b2RvMl0pO1xuYGBgXG4gICAqL1xuICBwb3N0QShlOiBFW10pIHtcbiAgICB0aGlzLnBvc3ROKC4uLmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFB1dCAoVXBkYXRlKSBhbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gZVxuICAgKiBAZXhhbXBsZSBQdXQgYSBUb2RvIGluc3RhbmNlLlxuYGBgXG5zdG9yZS5wdXQodG9kbzEpO1xuYGBgXG4gICAqL1xuICBwdXQoZTogRSB8IEVbXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgbGV0IGlkOiBzdHJpbmcgPSAoPGFueT5lKVt0aGlzLkdVSURfS0VZXTtcbiAgICAgIHRoaXMuZW50cmllcy5zZXQoaWQsIGUpO1xuICAgICAgdGhpcy51cGRhdGVJREVudHJ5KGUpO1xuICAgICAgbGV0IHY6IEVbXSA9IFsuLi5BcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSldO1xuICAgICAgdGhpcy5ub3RpZnkubmV4dCh2KTtcbiAgICAgIGNvbnN0IGRlbHRhOiBEZWx0YTxFPiA9IHsgdHlwZTogQWN0aW9uVHlwZXMuUFVULCBlbnRyaWVzOiBbZV0gfTtcbiAgICAgIHRoaXMubm90aWZ5RGVsdGEubmV4dChkZWx0YSk7XG4gICAgICBBcnJheS5mcm9tKHRoaXMuc2xpY2VzLnZhbHVlcygpKS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBzLnB1dChlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucHV0QShlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQdXQgKFVwZGF0ZSkgYW4gZWxlbWVudCBvciBhZGQgYW4gZWxlbWVudCB0aGF0IHdhcyByZWFkIGZyb20gYSBwZXJzaXN0ZW5jZSBzb3VyY2VcbiAgICogYW5kIHRodXMgYWxyZWFkeSBoYXMgYW4gYXNzaWduZWQgZ2xvYmFsIGlkYC5cbiAgICogQHBhcmFtIGVcbiAgICogQGV4YW1wbGUgUHV0IFRvZG8gaW5zdGFuY2VzLlxuYGBgXG5zdG9yZS5wdXQodG9kbzEsIHRvZG8yKTtcbmBgYFxuICAgKi9cbiAgcHV0TiguLi5lOiBFW10pIHtcbiAgICB0aGlzLnB1dEEoZSk7XG4gIH1cblxuICAvKipcbiAgICogUHV0IChVcGRhdGUpIHRoZSBhcnJheSBvZiBlbGVtZW50cy5cbiAgICogQHBhcmFtIGVcbiAgICogQGV4YW1wbGUgUHV0IFRvZG8gaW5zdGFuY2VzLlxuYGBgXG5zdG9yZS5wdXQoW3RvZG8xLCB0b2RvMl0pO1xuYGBgXG4gICAqL1xuICBwdXRBKGU6IEVbXSkge1xuICAgIGUuZm9yRWFjaChlID0+IHtcbiAgICAgIGxldCBndWlkOiBzdHJpbmcgPSAoPGFueT5lKVt0aGlzLkdVSURfS0VZXVxuICAgICAgdGhpcy5lbnRyaWVzLnNldChndWlkLCBlKVxuICAgICAgdGhpcy51cGRhdGVJREVudHJ5KGUpO1xuICAgIH0pO1xuICAgIC8vQ3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSB0byB0cmlnZ2VyIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbi5cbiAgICBsZXQgdjogRVtdID0gWy4uLkFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKV07XG4gICAgdGhpcy5ub3RpZnkubmV4dCh2KTtcbiAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7IHR5cGU6IEFjdGlvblR5cGVzLlBVVCwgZW50cmllczogZSB9O1xuICAgIHRoaXMubm90aWZ5RGVsdGEubmV4dChkZWx0YSk7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgIHMucHV0QShlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgKFVwZGF0ZSkgdGhlIGFycmF5IG9mIGVsZW1lbnRzLlxuICAgKiBAcGFyYW0gZVxuICAgKiBAZXhhbXBsZSBEZWxldGUgdG9kbzEuXG5gYGBcbnN0b3JlLmRlbGV0ZSh0b2RvMV0pO1xuYGBgXG4gICAqL1xuICBkZWxldGUoZTogRSB8IEVbXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlKSkge1xuICAgICAgdGhpcy5kZWxldGVBY3RpdmUoZSk7XG4gICAgICBjb25zdCBndWlkID0gKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV07XG4gICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGd1aWQpO1xuICAgICAgdGhpcy5kZWxldGVJREVudHJ5KGUpO1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgICAgcy5lbnRyaWVzLmRlbGV0ZShndWlkKTtcbiAgICAgIH0pO1xuICAgICAgLy9DcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgICAgbGV0IHY6IEVbXSA9IFsuLi5BcnJheS5mcm9tKHRoaXMuZW50cmllcy52YWx1ZXMoKSldO1xuICAgICAgY29uc3QgZGVsdGE6IERlbHRhPEU+ID0geyB0eXBlOiBBY3Rpb25UeXBlcy5ERUxFVEUsIGVudHJpZXM6IFtlXSB9O1xuICAgICAgdGhpcy5ub3RpZnlBbGwodiwgZGVsdGEpO1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgICAgcy5kZWxldGUoZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZUEoZSlcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgTiBlbGVtZW50cy5cbiAgICogQHBhcmFtIC4uLmVcbiAgICogQGV4YW1wbGUgUHV0IFRvZG8gaW5zdGFuY2VzLlxuYGBgXG5zdG9yZS5kZWxldGUodG9kbzEsIHRvZG8yKTtcbmBgYFxuICAgKi9cbiAgZGVsZXRlTiguLi5lOiBFW10pIHtcbiAgICB0aGlzLmRlbGV0ZUEoZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIE4gZWxlbWVudHMuXG4gICAqIEBwYXJhbSAuLi5lXG4gICAqIEBleGFtcGxlIFB1dCBUb2RvIGluc3RhbmNlcy5cbmBgYFxuc3RvcmUuZGVsZXRlKHRvZG8xLCB0b2RvMik7XG5gYGBcbiAgICovXG4gIGRlbGV0ZUEoZTogRVtdKSB7XG4gICAgZS5mb3JFYWNoKGUgPT4ge1xuICAgICAgdGhpcy5kZWxldGVBY3RpdmUoZSk7XG4gICAgICBjb25zdCBndWlkID0gKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV07XG4gICAgICB0aGlzLmVudHJpZXMuZGVsZXRlKGd1aWQpO1xuICAgICAgdGhpcy5kZWxldGVJREVudHJ5KGUpO1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgICAgcy5lbnRyaWVzLmRlbGV0ZShndWlkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vQ3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSB0byB0cmlnZ2VyIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbi5cbiAgICBsZXQgdjogRVtdID0gWy4uLkFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKV07XG4gICAgY29uc3QgZGVsdGE6IERlbHRhPEU+ID0geyB0eXBlOiBBY3Rpb25UeXBlcy5ERUxFVEUsIGVudHJpZXM6IGUgfTtcbiAgICB0aGlzLm5vdGlmeUFsbCh2LCBkZWx0YSk7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgIHMuZGVsZXRlQShlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZWxlbWVudHMgYnkge0BsaW5rIFByZWRpY2F0ZX0uXG4gICAqIEBwYXJhbSBwIFRoZSBwcmVkaWNhdGUuXG4gICAqIEBleGFtcGxlIFB1dCBUb2RvIGluc3RhbmNlcy5cbmBgYFxuc3RvcmUuZGVsZXRlKHRvZG8xLCB0b2RvMik7XG5gYGBcbiAgICovXG4gIGRlbGV0ZVAocDogUHJlZGljYXRlPEU+KSB7XG4gICAgY29uc3QgZDogRVtdID0gW107XG4gICAgQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMudmFsdWVzKCkpLmZvckVhY2goZSA9PiB7XG4gICAgICBpZiAocChlKSkge1xuICAgICAgICBkLnB1c2goZSk7XG4gICAgICAgIGNvbnN0IGlkID0gKDxhbnk+ZSlbdGhpcy5HVUlEX0tFWV07XG4gICAgICAgIHRoaXMuZW50cmllcy5kZWxldGUoaWQpO1xuICAgICAgICB0aGlzLmRlbGV0ZUFjdGl2ZShlKTtcbiAgICAgICAgdGhpcy5kZWxldGVJREVudHJ5KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vQ3JlYXRlIGEgbmV3IGFycmF5IHJlZmVyZW5jZSB0byB0cmlnZ2VyIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbi5cbiAgICBsZXQgdjogRVtdID0gWy4uLkFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKV07XG4gICAgY29uc3QgZGVsdGE6IERlbHRhPEU+ID0geyB0eXBlOiBBY3Rpb25UeXBlcy5ERUxFVEUsIGVudHJpZXM6IGQgfTtcbiAgICB0aGlzLm5vdGlmeUFsbCh2LCBkZWx0YSk7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgIHMuZGVsZXRlQShkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZW50aXR5IGhhcyB0aGUgYGlkYCBrZXkgaW5pdGlhbGl6ZWQgd2l0aCBhIHZhbHVlLFxuICAgKiB0aGVuIGFsc28gYWRkIHRoZSBlbnRpdHkgdG8gdGhlIGBpZEVudHJpZXNgLlxuICAgKlxuICAgKiBAcGFyYW0gZSBUaGUgZWxlbWVudCB0byBiZSBhZGRlZCB0byB0aGUgYGlkRW50cmllc2AuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUlERW50cnkoZTogRSkge1xuICAgIGlmICgoPGFueT5lKVt0aGlzLklEX0tFWV0pIHtcbiAgICAgIHRoaXMuaWRFbnRyaWVzLnNldCgoPGFueT5lKVt0aGlzLklEX0tFWV0sIGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZW50aXR5IGhhcyB0aGUgYGlkYCBrZXkgaW5pdGlhbGl6ZWQgd2l0aCBhIHZhbHVlLFxuICAgKiB0aGVuIGFsc28gZGVsZXRlIHRoZSBlbnRpdHkgdG8gdGhlIGBpZEVudHJpZXNgLlxuICAgKlxuICAgKiBAcGFyYW0gZSBUaGUgZWxlbWVudCB0byBiZSBhZGRlZCB0byB0aGUgYGlkRW50cmllc2AuXG4gICAqL1xuICBwcml2YXRlIGRlbGV0ZUlERW50cnkoZTogRSkge1xuICAgIGlmICgoPGFueT5lKVt0aGlzLklEX0tFWV0pIHtcbiAgICAgIHRoaXMuaWRFbnRyaWVzLmRlbGV0ZSgoPGFueT5lKVt0aGlzLklEX0tFWV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHN0b3JlIGFuZCBhbGwgY29udGFpbmVkIHNsaWNlIGluc3RhbmNlcyB0byBlbXB0eS5cbiAgICogQWxzbyBwZXJmb3JtIGRlbHRhIG5vdGlmaWNhdGlvbiB0aGF0IHNlbmRzIGFsbCBjdXJyZW50IHN0b3JlIGVudHJpZXMuXG4gICAqIFRoZSBBY3Rpb25UeXBlLlJFU0VUIGNvZGUgaXMgc2VudCB3aXRoIHRoZSBkZWx0YSBub3RpZmljYXRpb24uICBTbGljZXNcbiAgICogc2VuZCB0aGVpciBvd24gZGVsdGEgbm90aWZpY2F0aW9uLlxuICAgKiBcbiAgICogQGV4YW1wbGUgUmVzZXQgdGhlIHN0b3JlLlxuYGBgXG5zdG9yZS5yZXNldCgpO1xuYGBgXG4gICAqL1xuICByZXNldCgpIHtcbiAgICBjb25zdCBkZWx0YTogRGVsdGE8RT4gPSB7XG4gICAgICB0eXBlOiBBY3Rpb25UeXBlcy5SRVNFVCxcbiAgICAgIGVudHJpZXM6IEFycmF5LmZyb20odGhpcy5lbnRyaWVzLnZhbHVlcygpKVxuICAgIH07XG4gICAgdGhpcy5ub3RpZnlBbGwoW10sIGRlbHRhKTtcbiAgICB0aGlzLmVudHJpZXMgPSBuZXcgTWFwKCk7XG4gICAgQXJyYXkuZnJvbSh0aGlzLnNsaWNlcy52YWx1ZXMoKSkuZm9yRWFjaChzID0+IHtcbiAgICAgIHMucmVzZXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGFsbCB0aGUgbm90aWZpZXJzIGF0IG9uY2UuXG4gICAqXG4gICAqIEBwYXJhbSB2XG4gICAqIEBwYXJhbSBkZWx0YVxuICAgKi9cbiAgcHJvdGVjdGVkIG5vdGlmeUFsbCh2OiBFW10sIGRlbHRhOiBEZWx0YTxFPikge1xuICAgIHN1cGVyLm5vdGlmeUFsbCh2LCBkZWx0YSk7XG4gICAgdGhpcy5ub3RpZnlMb2FkaW5nLm5leHQodGhpcy5sb2FkaW5nKTtcbiAgfVxufSJdfQ==
@@ -50,6 +50,13 @@ class AbstractStore {
50
50
  * store or slice delta state changes.
51
51
  */
52
52
  this.notifyDelta = new ReplaySubject(1);
53
+ /**
54
+ * An Observable<E[]> reference
55
+ * to the entities in the store or
56
+ * Slice instance.
57
+ *
58
+ */
59
+ this.obs = this.observe();
53
60
  this.config = config
54
61
  ? freeze(Object.assign(Object.assign({}, ESTORE_CONFIG_DEFAULT), config))
55
62
  : ESTORE_CONFIG_DEFAULT;
@@ -767,11 +774,6 @@ class EStore extends AbstractStore {
767
774
  ```*/
768
775
  constructor(entities = [], config) {
769
776
  super(config);
770
- /**
771
- * An Observable<E[]> reference so that
772
- *
773
- */
774
- this.obs = this.observe();
775
777
  /**
776
778
  * Notifies observers when the store is empty.
777
779
  */