@sumaris-net/ngx-components 18.21.3 → 18.21.5

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.
package/doc/changelog.md CHANGED
@@ -1948,3 +1948,9 @@ enh: Environment: add useHash property to configure Angular router to use hash U
1948
1948
  # 18.21.0
1949
1949
  - enh(BaseEntityService) Allow to refetch mutable watch queries, when deleting
1950
1950
  - fix(validators) Fix optional chaining in requiredIf validator
1951
+
1952
+ # 18.21.3
1953
+ - fix(validators) `SharedFormGroupValidators.requiredIf` will now throw an exception if the control not exists (instead of an undefined property exception)
1954
+
1955
+ # 18.21.5
1956
+ - fix(GeoLocationUtils) rename GeoLocationUtils.computeDistanceInMiles into GeoLocationUtils.computeDistanceInNauticalMiles
@@ -233,4 +233,4 @@ export function resetCalculatedValue(controls, controlName) {
233
233
  AppFormUtils.setCalculatedValue(controls, controlName, undefined);
234
234
  }
235
235
  }
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUEwRDVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDYixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLElBQUksUUFBUTtRQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWtELElBQUcsQ0FBQztJQUM5RCxNQUFNLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBRTdELGNBQWMsQ0FBQyxJQUFrRCxJQUFHLENBQUM7SUFDckUsZUFBZSxDQUFDLElBQWtELElBQUcsQ0FBQztJQUN0RSxhQUFhLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBQ3BFLGdCQUFnQixDQUFDLElBQThCLElBQUcsQ0FBQztJQUNuRCxXQUFXLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBQ2xFLGFBQWEsQ0FBQyxJQUFrRCxJQUFHLENBQUM7SUFDcEUsWUFBWSxDQUFDLElBQWtELElBQUcsQ0FBQztJQUNuRSxXQUFXLENBQUMsSUFBa0QsSUFBRyxDQUFDO0lBQ2xFLGNBQWMsQ0FBQyxJQUFrRCxJQUFHLENBQUM7SUFFckUsUUFBUSxDQUFDLElBQXFCO1FBQzVCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsS0FBSztRQUNILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sZUFBZTtJQUdOO0lBRnBCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUVyQyxZQUFvQixRQUFpQjtRQUFqQixhQUFRLEdBQVIsUUFBUSxDQUFTO0lBQUcsQ0FBQztJQUV6QyxJQUFZLFFBQVE7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQXFCO1FBQ2hDLElBQUksT0FBVSxDQUFDO1FBQ2YsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCw2QkFBNkI7SUFFN0IsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQXFCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQWtEO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFrRDtRQUN2RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxjQUFjLENBQUMsSUFBa0Q7UUFDL0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsZUFBZSxDQUFDLElBQWtEO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFrRDtRQUM5RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxJQUE4QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFrRDtRQUM1RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxhQUFhLENBQUMsSUFBa0Q7UUFDOUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsWUFBWSxDQUFDLElBQWtEO1FBQzdELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELFdBQVcsQ0FBQyxJQUFrRDtRQUM1RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxjQUFjLENBQUMsSUFBa0Q7UUFDL0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBR0g7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUN2QixNQUFNLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxNQUFNLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFFdkQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7SUFFL0MsTUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztJQUN2RCxNQUFNLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsTUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQyxNQUFNLENBQUMsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUM7SUFDakUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0lBQy9DOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztJQUV4Qzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzNDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUMzQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixNQUFNLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7SUFFdkQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFXO1FBQ3ZCLE9BQU8sTUFBTSxZQUFZLGVBQWUsSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLElBQUksU0FBUyxJQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBVztRQUN4QixPQUFPLE1BQU0sSUFBSSxNQUFNLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsWUFBWTtJQUNaLE1BQU0sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQyxNQUFNLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxNQUFNLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7SUFFN0Msb0JBQW9CO0lBQ3BCLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZLENBQUM7SUFDdkMsTUFBTSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztJQUMvQyxNQUFNLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7SUFFbkQsY0FBYztJQUNkLE1BQU0sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyx3QkFBd0IsQ0FBQztJQUN2RCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsc0JBQXNCLENBQUM7SUFDbkQsTUFBTSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQztJQUV2Qzs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUVyQzs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQzs7QUFHdkMsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQTRDLEVBQUUsV0FBbUI7SUFDakcscUZBQXFGO0lBQ3JGLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2SCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQTRDLEVBQUUsV0FBbUIsRUFBRSxLQUF5QjtJQUM3SCx1QkFBdUI7SUFDdkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxxQ0FBcUM7SUFDckMsUUFBUSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUE0QyxFQUFFLFdBQW1CO0lBQ3BHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxtREFBbUQ7UUFDbkQsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDcEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyByb3VuZCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXJOdW1iZXJJbnB1dCwgc2VsZWN0SW5wdXRDb250ZW50LCBzZWxlY3RJbnB1dENvbnRlbnRGcm9tRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaW5wdXRzJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gIGFkZFZhbHVlSW5BcnJheSxcbiAgY2xlYXJWYWx1ZUluQXJyYXksXG4gIGNvcHlFbnRpdHkyRm9ybSxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbCxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbHMsXG4gIGRpc2FibGVDb250cm9sLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGVuYWJsZUNvbnRyb2wsXG4gIGVuYWJsZUNvbnRyb2xzLFxuICBmaWx0ZXJGb3JtRXJyb3JzLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQYXRoLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQcmVmaXgsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICByZW1vdmVWYWx1ZUluQXJyYXksXG4gIHJlc2l6ZUFycmF5LFxuICBzZXRDb250cm9sRW5hYmxlZCxcbiAgc2V0Q29udHJvbHNFbmFibGVkLFxuICBzZXRGb3JtRXJyb3JzLFxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuICB3YWl0SWRsZSxcbiAgd2FpdFdoaWxlUGVuZGluZyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IHR5cGUgSUFwcEZvcm1HZXR0ZXIgPSAoKSA9PiBJQXBwRm9ybTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE9uUmVhZHkge1xuICBuZ09uUmVhZHkoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwRm9ybTxUID0gYW55PiB7XG4gIC8vIEZyb20gQW5ndWxhciBmb3JtXG4gIGludmFsaWQ6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBkaXJ0eTogYm9vbGVhbjtcbiAgcGVuZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHRvdWNoZWQ6IGJvb2xlYW47XG4gIHVudG91Y2hlZDogYm9vbGVhbjtcbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG5cbiAgLy8gU3BlY2lmaWMgdG8gSUFwcEZvcm1cbiAgZW1wdHk/OiBib29sZWFuO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgbG9hZGVkPzogYm9vbGVhbjtcbiAgZGVzdHJveWVkPzogYm9vbGVhbjtcbiAgcmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+O1xuXG4gIC8vIE9wdGlvbmFsIGZ1bmN0aW9uc1xuICBzZXRWYWx1ZT86IChkYXRhOiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIHBhdGNoVmFsdWU/OiAoZGF0YTogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICByZXNldD86IChkYXRhPzogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pID0+IHZvaWQ7XG4gIGdldFZhbHVlPzogKCkgPT4gUHJvbWlzZTxUPiB8IFQ7XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNMb2FkZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5TYXZlIHtcbiAgZGlydHk6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBzYXZlKCk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuTGVhdmUgZXh0ZW5kcyBDYW5TYXZlIHtcbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGZvcm0gdGhhdCBkbyBub3RoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBOdWxsRm9ybSBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgcmVhZG9ubHkgaW52YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSB2YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSBkaXJ0eSA9IGZhbHNlO1xuICByZWFkb25seSBlbXB0eSA9IHRydWU7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBudWxsO1xuICByZWFkb25seSBlbmFibGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGZhbHNlKTtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cnVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXBwRm9ybVByb3ZpZGVyPEYgZXh0ZW5kcyBJQXBwRm9ybSA9IElBcHBGb3JtPiBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgc3RhdGljIE5VTExfRk9STSA9IG5ldyBBcHBOdWxsRm9ybSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ2V0dGVyRm46ICgpID0+IEYpIHt9XG5cbiAgcHJpdmF0ZSBnZXQgZGVsZWdhdGUoKTogSUFwcEZvcm0ge1xuICAgIHJldHVybiB0aGlzLmdldHRlckZuKCkgfHwgQXBwRm9ybVByb3ZpZGVyLk5VTExfRk9STTtcbiAgfVxuXG4gIHdhaXREZWxlZ2F0ZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPEY+IHtcbiAgICBsZXQgY29udGVudDogRjtcbiAgICByZXR1cm4gd2FpdEZvcigoKSA9PiB7XG4gICAgICBjb250ZW50ID0gdGhpcy5nZXR0ZXJGbigpO1xuICAgICAgcmV0dXJuICEhY29udGVudDtcbiAgICB9LCBvcHRzKS50aGVuKChfKSA9PiBjb250ZW50KTtcbiAgfVxuXG4gIC8qIC0tIGRlbGVnYXRlZCBtZXRob2RzIC0tICovXG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlZDtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlzYWJsZWQ7XG4gIH1cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZXJyb3I7XG4gIH1cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuaW52YWxpZDtcbiAgfVxuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudmFsaWQ7XG4gIH1cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpcnR5O1xuICB9XG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbXB0eTtcbiAgfVxuICBnZXQgcGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wZW5kaW5nO1xuICB9XG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmxvYWRpbmc7XG4gIH1cbiAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudG91Y2hlZDtcbiAgfVxuICBnZXQgdW50b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnVudG91Y2hlZDtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnJlYWR5KCk7XG4gIH1cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS53YWl0SWRsZSgpO1xuICB9XG4gIGRpc2FibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXNhYmxlKG9wdHMpO1xuICB9XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVuYWJsZShvcHRzKTtcbiAgfVxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xuICB9XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBbGxBc1RvdWNoZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzTG9hZGluZyhvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNSZWFkeShvcHRzKTtcbiAgfVxuICBtYXJrQXNOb3RSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc05vdFJlYWR5KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoQXBwRm9ybVV0aWxzLmNhblNhdmUodGhpcy5kZWxlZ2F0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnNhdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MsIGZvciBhbmd1bGFyIGZvcm1zXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBGb3JtVXRpbHMge1xuICBzdGF0aWMgY29weUVudGl0eTJGb3JtID0gY29weUVudGl0eTJGb3JtO1xuICBzdGF0aWMgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGNvbnRyb2wgZnJvbSB0aGUgcHJvdmlkZWQgZm9ybS9jb250cm9sIHN0cnVjdHVyZSB1c2luZyBhIGRvdC1zZXBhcmF0ZWQgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGZvcm0gLSBUaGUgcm9vdCBmb3JtIGdyb3VwLCBmb3JtIGFycmF5LCBvciBjb250cm9sIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBkb3Qtc2VwYXJhdGVkIHBhdGggc3BlY2lmeWluZyB0aGUgY29udHJvbC4gRm9yIGV4YW1wbGUsICdncm91cE5hbWUuY29udHJvbE5hbWUnIG9yICdhcnJheU5hbWUuMC5jb250cm9sTmFtZScuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0cmljdD10cnVlXSAtIElmIHRydWUsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgZnVsbCBwYXRoIGNhbm5vdCBiZSByZXNvbHZlZDsgaWYgZmFsc2UsIHJldHVybnMgdGhlIGxhc3QgdmFsaWQgY29udHJvbCBlbmNvdW50ZXJlZC5cbiAgICogQHJldHVybiB7QWJzdHJhY3RDb250cm9sfSAtIFRoZSBjb250cm9sIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBvciB0aGUgY2xvc2VzdCB2YWxpZCBjb250cm9sIGlmIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHBhdGggY2Fubm90IGJlIHJlc29sdmVkIGFuZCBzdHJpY3QgbW9kZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgc3RhdGljIGdldENvbnRyb2xGcm9tUGF0aCA9IGdldENvbnRyb2xGcm9tUGF0aDtcblxuICBzdGF0aWMgZmlsdGVyTnVtYmVySW5wdXQgPSBmaWx0ZXJOdW1iZXJJbnB1dDtcbiAgc3RhdGljIGVuYWJsZUNvbnRyb2xzID0gZW5hYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBlbmFibGVDb250cm9sID0gZW5hYmxlQ29udHJvbDtcbiAgc3RhdGljIGRpc2FibGVDb250cm9sID0gZGlzYWJsZUNvbnRyb2w7XG4gIHN0YXRpYyBkaXNhYmxlQ29udHJvbHMgPSBkaXNhYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBkaXNhYmxlQW5kQ2xlYXJDb250cm9sID0gZGlzYWJsZUFuZENsZWFyQ29udHJvbDtcbiAgc3RhdGljIGRpc2FibGVBbmRDbGVhckNvbnRyb2xzID0gZGlzYWJsZUFuZENsZWFyQ29udHJvbHM7XG4gIHN0YXRpYyBzZXRDb250cm9sRW5hYmxlZCA9IHNldENvbnRyb2xFbmFibGVkO1xuICBzdGF0aWMgc2V0Q29udHJvbHNFbmFibGVkID0gc2V0Q29udHJvbHNFbmFibGVkO1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50O1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1hcmtBbGxBc1RvdWNoZWQoKSBpbnN0ZWFkIChuYW1pbmcgd2FzIHdyb25nKVxuICAgKi9cbiAgc3RhdGljIG1hcmtBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50IGNvbnRyb2xzIGFzIHRvdWNoZWQuXG4gICAqIFNlZSBhbHNvOlxuICAgKiAtIGBtYXJrQXNUb3VjaGVkKClgXG4gICAqL1xuICBzdGF0aWMgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG4gIHN0YXRpYyBtYXJrQXNVbnRvdWNoZWQgPSBtYXJrQXNVbnRvdWNoZWQ7XG4gIHN0YXRpYyB3YWl0V2hpbGVQZW5kaW5nID0gd2FpdFdoaWxlUGVuZGluZztcbiAgc3RhdGljIHdhaXRJZGxlID0gd2FpdElkbGU7XG4gIHN0YXRpYyB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eTtcblxuICBzdGF0aWMgaXNGb3JtKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgQXBwRm9ybVByb3ZpZGVyIHx8ICgnZGlydHknIGluIG9iamVjdCAmJiAnZW5hYmxlZCcgaW4gb2JqZWN0ICYmICd2YWxpZCcgaW4gb2JqZWN0KTtcbiAgfVxuXG4gIHN0YXRpYyBjYW5TYXZlKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtICYgQ2FuU2F2ZSB7XG4gICAgcmV0dXJuICdzYXZlJyBpbiBvYmplY3QgJiYgQXBwRm9ybVV0aWxzLmlzRm9ybShvYmplY3QpO1xuICB9XG5cbiAgLy8gQXJyYXlGb3JtXG4gIHN0YXRpYyBhZGRWYWx1ZUluQXJyYXkgPSBhZGRWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZW1vdmVWYWx1ZUluQXJyYXkgPSByZW1vdmVWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZXNpemVBcnJheSA9IHJlc2l6ZUFycmF5O1xuICBzdGF0aWMgY2xlYXJWYWx1ZUluQXJyYXkgPSBjbGVhclZhbHVlSW5BcnJheTtcblxuICAvLyBDYWxjdWxhdGVkIGZpZWxkc1xuICBzdGF0aWMgY2FsY3VsYXRlZFN1ZmZpeCA9ICdDYWxjdWxhdGVkJztcbiAgc3RhdGljIGlzQ29udHJvbEhhc0lucHV0ID0gaXNDb250cm9sSGFzSW5wdXQ7XG4gIHN0YXRpYyBzZXRDYWxjdWxhdGVkVmFsdWUgPSBzZXRDYWxjdWxhdGVkVmFsdWU7XG4gIHN0YXRpYyByZXNldENhbGN1bGF0ZWRWYWx1ZSA9IHJlc2V0Q2FsY3VsYXRlZFZhbHVlO1xuXG4gIC8vIEZvcm0gZXJyb3JzXG4gIHN0YXRpYyBsb2dGb3JtRXJyb3JzID0gbG9nRm9ybUVycm9ycztcbiAgc3RhdGljIGZpbHRlckVycm9yc0J5UHJlZml4ID0gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4O1xuICBzdGF0aWMgZmlsdGVyRXJyb3JzQnlQYXRoID0gZmlsdGVyRm9ybUVycm9yc0J5UGF0aDtcbiAgc3RhdGljIGZpbHRlckVycm9ycyA9IGZpbHRlckZvcm1FcnJvcnM7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhIGdpdmVuIGZvcm0gY29udHJvbCwgaW5jbHVkaW5nIGl0cyBjaGlsZCBjb250cm9scyBpZiBpdCBpcyBhIGZvcm0gZ3JvdXAgb3IgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGZvcm0gY29udHJvbCB0byByZXRyaWV2ZSBlcnJvcnMgZnJvbS4gVGhpcyBjYW4gYmUgYSBmb3JtIGdyb3VwLCBhIGZvcm0gYXJyYXksIG9yIGEgc2ltcGxlIGZvcm0gY29udHJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25zIGZvciBlcnJvciByZXRyaWV2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb250cm9sTmFtZV0gLSBUaGUgbmFtZSBvciBwYXRoIG9mIHRoZSBjb250cm9sIGJlaW5nIHByb2Nlc3NlZCwgdXNlZCBmb3Igc3RydWN0dXJpbmcgZXJyb3Iga2V5cyBpbiB0aGUgcmVzdWx0LlxuICAgKiBAcGFyYW0ge0Zvcm1FcnJvcnN9IFtvcHRzLnJlc3VsdF0gLSBUaGUgb2JqZWN0IHRvIHdoaWNoIGVycm9ycyB3aWxsIGJlIGFkZGVkLCBhbGxvd2luZyBmb3IgYWdncmVnYXRpb24gYW5kIHBlcnNpc3RlbmNlIGJldHdlZW4gY2FsbHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVjdXJzaXZlPXRydWVdIC0gV2hldGhlciB0byByZWN1cnNpdmVseSBjb2xsZWN0IGVycm9ycyBmcm9tIGNoaWxkIGNvbnRyb2xzIHdpdGhpbiBhIGZvcm0gZ3JvdXAgb3IgYXJyYXkuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEByZXR1cm4ge0Zvcm1FcnJvcnN9IFRoZSBjb2xsZWN0ZWQgZXJyb3JzIGFzIGEga2V5LXZhbHVlIG9iamVjdCB3aGVyZSBrZXlzIHJlcHJlc2VudCBjb250cm9sIG5hbWVzIG9yIHBhdGhzIGFuZCB2YWx1ZXMgcmVwcmVzZW50IHRoZWlyIHJlc3BlY3RpdmUgZXJyb3JzLiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBwcm92aWRlZCBjb250cm9sIGlzIHZhbGlkIGFuZCBoYXMgbm8gZXJyb3JzLlxuICAgKi9cbiAgc3RhdGljIGdldEZvcm1FcnJvcnMgPSBnZXRGb3JtRXJyb3JzO1xuXG4gIC8qKlxuICAgKiBTZXRzIGZvcm0gZXJyb3JzIG9uIGFuIEFic3RyYWN0Q29udHJvbCwgaW5jbHVkaW5nIG5lc3RlZCBjb250cm9scyB3aXRoaW4gZm9ybSBncm91cHMgb3IgYXJyYXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBmb3JtIGNvbnRyb2wsIGZvcm0gZ3JvdXAsIG9yIGZvcm0gYXJyYXkgdG8gYXBwbHkgdGhlIGVycm9ycyB0by5cbiAgICogQHBhcmFtIHtGb3JtRXJyb3JzfSBlcnJvcnMgLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBlcnJvcnMgdG8gYmUgc2V0IG9uIHRoZSBjb250cm9sIG9yIGl0cyBjaGlsZHJlbi5cbiAgICogQHJldHVybiB7dm9pZH0gRG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgc2V0Rm9ybUVycm9ycyA9IHNldEZvcm1FcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRyb2xIYXNJbnB1dChjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9LCBjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gIC8vIHNldCB2YWx1ZSB0byBjb250cm9sXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lXS5zZXRWYWx1ZShyb3VuZCh2YWx1ZSkpO1xuICAvLyBzZXQgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgdG8gJ3RydWUnXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lICsgQXBwRm9ybVV0aWxzLmNhbGN1bGF0ZWRTdWZmaXhdLnNldFZhbHVlKHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFpc0NvbnRyb2xIYXNJbnB1dChjb250cm9scywgY29udHJvbE5hbWUpKSB7XG4gICAgLy8gc2V0IHVuZGVmaW5lZCBvbmx5IGlmIGNvbnRyb2wgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgQXBwRm9ybVV0aWxzLnNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9scywgY29udHJvbE5hbWUsIHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGNBQWMsRUFDZCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUEwRDVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDYixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDZCxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixPQUFPLEdBQUcsS0FBSyxDQUFD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QUFDLENBQUM7SUFDcEUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyByb3VuZCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXJOdW1iZXJJbnB1dCwgc2VsZWN0SW5wdXRDb250ZW50LCBzZWxlY3RJbnB1dENvbnRlbnRGcm9tRXZlbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaW5wdXRzJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gIGFkZFZhbHVlSW5BcnJheSxcbiAgY2xlYXJWYWx1ZUluQXJyYXksXG4gIGNvcHlFbnRpdHkyRm9ybSxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbCxcbiAgZGlzYWJsZUFuZENsZWFyQ29udHJvbHMsXG4gIGRpc2FibGVDb250cm9sLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGVuYWJsZUNvbnRyb2wsXG4gIGVuYWJsZUNvbnRyb2xzLFxuICBmaWx0ZXJGb3JtRXJyb3JzLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQYXRoLFxuICBmaWx0ZXJGb3JtRXJyb3JzQnlQcmVmaXgsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICByZW1vdmVWYWx1ZUluQXJyYXksXG4gIHJlc2l6ZUFycmF5LFxuICBzZXRDb250cm9sRW5hYmxlZCxcbiAgc2V0Q29udHJvbHNFbmFibGVkLFxuICBzZXRGb3JtRXJyb3JzLFxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5LFxuICB3YWl0SWRsZSxcbiAgd2FpdFdoaWxlUGVuZGluZyxcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IHR5cGUgSUFwcEZvcm1HZXR0ZXIgPSAoKSA9PiBJQXBwRm9ybTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE9uUmVhZHkge1xuICBuZ09uUmVhZHkoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwRm9ybTxUID0gYW55PiB7XG4gIC8vIEZyb20gQW5ndWxhciBmb3JtXG4gIGludmFsaWQ6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBkaXJ0eTogYm9vbGVhbjtcbiAgcGVuZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHRvdWNoZWQ6IGJvb2xlYW47XG4gIHVudG91Y2hlZDogYm9vbGVhbjtcbiAgZGlzYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG5cbiAgLy8gU3BlY2lmaWMgdG8gSUFwcEZvcm1cbiAgZW1wdHk/OiBib29sZWFuO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgbG9hZGVkPzogYm9vbGVhbjtcbiAgZGVzdHJveWVkPzogYm9vbGVhbjtcbiAgcmVhZHkob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+O1xuXG4gIC8vIE9wdGlvbmFsIGZ1bmN0aW9uc1xuICBzZXRWYWx1ZT86IChkYXRhOiBULCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIHBhdGNoVmFsdWU/OiAoZGF0YTogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICByZXNldD86IChkYXRhPzogVCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pID0+IHZvaWQ7XG4gIGdldFZhbHVlPzogKCkgPT4gUHJvbWlzZTxUPiB8IFQ7XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNEaXJ0eShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNMb2FkZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiB2b2lkO1xuICBtYXJrQXNSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IHZvaWQ7XG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYW5TYXZlIHtcbiAgZGlydHk6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBzYXZlKCk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FuTGVhdmUgZXh0ZW5kcyBDYW5TYXZlIHtcbiAgY2FuY2VsKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGZvcm0gdGhhdCBkbyBub3RoaW5nXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBOdWxsRm9ybSBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgcmVhZG9ubHkgaW52YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSB2YWxpZCA9IGZhbHNlO1xuICByZWFkb25seSBkaXJ0eSA9IGZhbHNlO1xuICByZWFkb25seSBlbXB0eSA9IHRydWU7XG4gIHJlYWRvbmx5IHBlbmRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZXJyb3IgPSBudWxsO1xuICByZWFkb25seSBlbmFibGVkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdG91Y2hlZCA9IGZhbHNlO1xuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc05vdFJlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7fVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGZhbHNlKTtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cnVlKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXBwRm9ybVByb3ZpZGVyPEYgZXh0ZW5kcyBJQXBwRm9ybSA9IElBcHBGb3JtPiBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgc3RhdGljIE5VTExfRk9STSA9IG5ldyBBcHBOdWxsRm9ybSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ2V0dGVyRm46ICgpID0+IEYpIHt9XG5cbiAgcHJpdmF0ZSBnZXQgZGVsZWdhdGUoKTogSUFwcEZvcm0ge1xuICAgIHJldHVybiB0aGlzLmdldHRlckZuKCkgfHwgQXBwRm9ybVByb3ZpZGVyLk5VTExfRk9STTtcbiAgfVxuXG4gIHdhaXREZWxlZ2F0ZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPEY+IHtcbiAgICBsZXQgY29udGVudDogRjtcbiAgICByZXR1cm4gd2FpdEZvcigoKSA9PiB7XG4gICAgICBjb250ZW50ID0gdGhpcy5nZXR0ZXJGbigpO1xuICAgICAgcmV0dXJuICEhY29udGVudDtcbiAgICB9LCBvcHRzKS50aGVuKChfKSA9PiBjb250ZW50KTtcbiAgfVxuXG4gIC8qIC0tIGRlbGVnYXRlZCBtZXRob2RzIC0tICovXG5cbiAgZ2V0IGVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlZDtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlzYWJsZWQ7XG4gIH1cbiAgZ2V0IGVycm9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZXJyb3I7XG4gIH1cbiAgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuaW52YWxpZDtcbiAgfVxuICBnZXQgdmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudmFsaWQ7XG4gIH1cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpcnR5O1xuICB9XG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbXB0eTtcbiAgfVxuICBnZXQgcGVuZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5wZW5kaW5nO1xuICB9XG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmxvYWRpbmc7XG4gIH1cbiAgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudG91Y2hlZDtcbiAgfVxuICBnZXQgdW50b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnVudG91Y2hlZDtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnJlYWR5KCk7XG4gIH1cbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS53YWl0SWRsZSgpO1xuICB9XG4gIGRpc2FibGUob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXNhYmxlKG9wdHMpO1xuICB9XG4gIGVuYWJsZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVuYWJsZShvcHRzKTtcbiAgfVxuICBtYXJrQXNQcmlzdGluZShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xuICB9XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBbGxBc1RvdWNoZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzRGlydHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNEaXJ0eShvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzTG9hZGluZyhvcHRzKTtcbiAgfVxuICBtYXJrQXNMb2FkZWQob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzUmVhZHkob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNSZWFkeShvcHRzKTtcbiAgfVxuICBtYXJrQXNOb3RSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc05vdFJlYWR5KG9wdHMpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoQXBwRm9ybVV0aWxzLmNhblNhdmUodGhpcy5kZWxlZ2F0ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnNhdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MsIGZvciBhbmd1bGFyIGZvcm1zXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBGb3JtVXRpbHMge1xuICBzdGF0aWMgY29weUVudGl0eTJGb3JtID0gY29weUVudGl0eTJGb3JtO1xuICBzdGF0aWMgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHk7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGNvbnRyb2wgZnJvbSB0aGUgcHJvdmlkZWQgZm9ybS9jb250cm9sIHN0cnVjdHVyZSB1c2luZyBhIGRvdC1zZXBhcmF0ZWQgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGZvcm0gLSBUaGUgcm9vdCBmb3JtIGdyb3VwLCBmb3JtIGFycmF5LCBvciBjb250cm9sIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBkb3Qtc2VwYXJhdGVkIHBhdGggc3BlY2lmeWluZyB0aGUgY29udHJvbC4gRm9yIGV4YW1wbGUsICdncm91cE5hbWUuY29udHJvbE5hbWUnIG9yICdhcnJheU5hbWUuMC5jb250cm9sTmFtZScuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0cmljdD10cnVlXSAtIElmIHRydWUsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgZnVsbCBwYXRoIGNhbm5vdCBiZSByZXNvbHZlZDsgaWYgZmFsc2UsIHJldHVybnMgdGhlIGxhc3QgdmFsaWQgY29udHJvbCBlbmNvdW50ZXJlZC5cbiAgICogQHJldHVybiB7QWJzdHJhY3RDb250cm9sfSAtIFRoZSBjb250cm9sIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBvciB0aGUgY2xvc2VzdCB2YWxpZCBjb250cm9sIGlmIHN0cmljdCBtb2RlIGlzIGRpc2FibGVkLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHBhdGggY2Fubm90IGJlIHJlc29sdmVkIGFuZCBzdHJpY3QgbW9kZSBpcyBlbmFibGVkLlxuICAgKi9cbiAgc3RhdGljIGdldENvbnRyb2xGcm9tUGF0aCA9IGdldENvbnRyb2xGcm9tUGF0aDtcblxuICBzdGF0aWMgZmlsdGVyTnVtYmVySW5wdXQgPSBmaWx0ZXJOdW1iZXJJbnB1dDtcbiAgc3RhdGljIGVuYWJsZUNvbnRyb2xzID0gZW5hYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBlbmFibGVDb250cm9sID0gZW5hYmxlQ29udHJvbDtcbiAgc3RhdGljIGRpc2FibGVDb250cm9sID0gZGlzYWJsZUNvbnRyb2w7XG4gIHN0YXRpYyBkaXNhYmxlQ29udHJvbHMgPSBkaXNhYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBkaXNhYmxlQW5kQ2xlYXJDb250cm9sID0gZGlzYWJsZUFuZENsZWFyQ29udHJvbDtcbiAgc3RhdGljIGRpc2FibGVBbmRDbGVhckNvbnRyb2xzID0gZGlzYWJsZUFuZENsZWFyQ29udHJvbHM7XG4gIHN0YXRpYyBzZXRDb250cm9sRW5hYmxlZCA9IHNldENvbnRyb2xFbmFibGVkO1xuICBzdGF0aWMgc2V0Q29udHJvbHNFbmFibGVkID0gc2V0Q29udHJvbHNFbmFibGVkO1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50RnJvbUV2ZW50O1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1hcmtBbGxBc1RvdWNoZWQoKSBpbnN0ZWFkIChuYW1pbmcgd2FzIHdyb25nKVxuICAgKi9cbiAgc3RhdGljIG1hcmtBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50IGNvbnRyb2xzIGFzIHRvdWNoZWQuXG4gICAqIFNlZSBhbHNvOlxuICAgKiAtIGBtYXJrQXNUb3VjaGVkKClgXG4gICAqL1xuICBzdGF0aWMgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG4gIHN0YXRpYyBtYXJrQXNVbnRvdWNoZWQgPSBtYXJrQXNVbnRvdWNoZWQ7XG4gIHN0YXRpYyB3YWl0V2hpbGVQZW5kaW5nID0gd2FpdFdoaWxlUGVuZGluZztcbiAgc3RhdGljIHdhaXRJZGxlID0gd2FpdElkbGU7XG4gIHN0YXRpYyB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eTtcblxuICBzdGF0aWMgaXNGb3JtKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgQXBwRm9ybVByb3ZpZGVyIHx8ICgnZGlydHknIGluIG9iamVjdCAmJiAnZW5hYmxlZCcgaW4gb2JqZWN0ICYmICd2YWxpZCcgaW4gb2JqZWN0KTtcbiAgfVxuXG4gIHN0YXRpYyBjYW5TYXZlKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtICYgQ2FuU2F2ZSB7XG4gICAgcmV0dXJuICdzYXZlJyBpbiBvYmplY3QgJiYgQXBwRm9ybVV0aWxzLmlzRm9ybShvYmplY3QpO1xuICB9XG5cbiAgLy8gQXJyYXlGb3JtXG4gIHN0YXRpYyBhZGRWYWx1ZUluQXJyYXkgPSBhZGRWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZW1vdmVWYWx1ZUluQXJyYXkgPSByZW1vdmVWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZXNpemVBcnJheSA9IHJlc2l6ZUFycmF5O1xuICBzdGF0aWMgY2xlYXJWYWx1ZUluQXJyYXkgPSBjbGVhclZhbHVlSW5BcnJheTtcblxuICAvLyBDYWxjdWxhdGVkIGZpZWxkc1xuICBzdGF0aWMgY2FsY3VsYXRlZFN1ZmZpeCA9ICdDYWxjdWxhdGVkJztcbiAgc3RhdGljIGlzQ29udHJvbEhhc0lucHV0ID0gaXNDb250cm9sSGFzSW5wdXQ7XG4gIHN0YXRpYyBzZXRDYWxjdWxhdGVkVmFsdWUgPSBzZXRDYWxjdWxhdGVkVmFsdWU7XG4gIHN0YXRpYyByZXNldENhbGN1bGF0ZWRWYWx1ZSA9IHJlc2V0Q2FsY3VsYXRlZFZhbHVlO1xuXG4gIC8vIEZvcm0gZXJyb3JzXG4gIHN0YXRpYyBsb2dGb3JtRXJyb3JzID0gbG9nRm9ybUVycm9ycztcbiAgc3RhdGljIGZpbHRlckVycm9yc0J5UHJlZml4ID0gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4O1xuICBzdGF0aWMgZmlsdGVyRXJyb3JzQnlQYXRoID0gZmlsdGVyRm9ybUVycm9yc0J5UGF0aDtcbiAgc3RhdGljIGZpbHRlckVycm9ycyA9IGZpbHRlckZvcm1FcnJvcnM7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgZnJvbSBhIGdpdmVuIGZvcm0gY29udHJvbCwgaW5jbHVkaW5nIGl0cyBjaGlsZCBjb250cm9scyBpZiBpdCBpcyBhIGZvcm0gZ3JvdXAgb3IgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGZvcm0gY29udHJvbCB0byByZXRyaWV2ZSBlcnJvcnMgZnJvbS4gVGhpcyBjYW4gYmUgYSBmb3JtIGdyb3VwLCBhIGZvcm0gYXJyYXksIG9yIGEgc2ltcGxlIGZvcm0gY29udHJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25zIGZvciBlcnJvciByZXRyaWV2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb250cm9sTmFtZV0gLSBUaGUgbmFtZSBvciBwYXRoIG9mIHRoZSBjb250cm9sIGJlaW5nIHByb2Nlc3NlZCwgdXNlZCBmb3Igc3RydWN0dXJpbmcgZXJyb3Iga2V5cyBpbiB0aGUgcmVzdWx0LlxuICAgKiBAcGFyYW0ge0Zvcm1FcnJvcnN9IFtvcHRzLnJlc3VsdF0gLSBUaGUgb2JqZWN0IHRvIHdoaWNoIGVycm9ycyB3aWxsIGJlIGFkZGVkLCBhbGxvd2luZyBmb3IgYWdncmVnYXRpb24gYW5kIHBlcnNpc3RlbmNlIGJldHdlZW4gY2FsbHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMucmVjdXJzaXZlPXRydWVdIC0gV2hldGhlciB0byByZWN1cnNpdmVseSBjb2xsZWN0IGVycm9ycyBmcm9tIGNoaWxkIGNvbnRyb2xzIHdpdGhpbiBhIGZvcm0gZ3JvdXAgb3IgYXJyYXkuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqIEByZXR1cm4ge0Zvcm1FcnJvcnN9IFRoZSBjb2xsZWN0ZWQgZXJyb3JzIGFzIGEga2V5LXZhbHVlIG9iamVjdCB3aGVyZSBrZXlzIHJlcHJlc2VudCBjb250cm9sIG5hbWVzIG9yIHBhdGhzIGFuZCB2YWx1ZXMgcmVwcmVzZW50IHRoZWlyIHJlc3BlY3RpdmUgZXJyb3JzLiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBwcm92aWRlZCBjb250cm9sIGlzIHZhbGlkIGFuZCBoYXMgbm8gZXJyb3JzLlxuICAgKi9cbiAgc3RhdGljIGdldEZvcm1FcnJvcnMgPSBnZXRGb3JtRXJyb3JzO1xuXG4gIC8qKlxuICAgKiBTZXRzIGZvcm0gZXJyb3JzIG9uIGFuIEFic3RyYWN0Q29udHJvbCwgaW5jbHVkaW5nIG5lc3RlZCBjb250cm9scyB3aXRoaW4gZm9ybSBncm91cHMgb3IgYXJyYXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBmb3JtIGNvbnRyb2wsIGZvcm0gZ3JvdXAsIG9yIGZvcm0gYXJyYXkgdG8gYXBwbHkgdGhlIGVycm9ycyB0by5cbiAgICogQHBhcmFtIHtGb3JtRXJyb3JzfSBlcnJvcnMgLSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBlcnJvcnMgdG8gYmUgc2V0IG9uIHRoZSBjb250cm9sIG9yIGl0cyBjaGlsZHJlbi5cbiAgICogQHJldHVybiB7dm9pZH0gRG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuXG4gICAqL1xuICBzdGF0aWMgc2V0Rm9ybUVycm9ycyA9IHNldEZvcm1FcnJvcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRyb2xIYXNJbnB1dChjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2wgfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbCB9LCBjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gIC8vIHNldCB2YWx1ZSB0byBjb250cm9sXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lXS5zZXRWYWx1ZShyb3VuZCh2YWx1ZSkpO1xuICAvLyBzZXQgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgdG8gJ3RydWUnXG4gIGNvbnRyb2xzW2NvbnRyb2xOYW1lICsgQXBwRm9ybVV0aWxzLmNhbGN1bGF0ZWRTdWZmaXhdLnNldFZhbHVlKHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFpc0NvbnRyb2xIYXNJbnB1dChjb250cm9scywgY29udHJvbE5hbWUpKSB7XG4gICAgLy8gc2V0IHVuZGVmaW5lZCBvbmx5IGlmIGNvbnRyb2wgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgQXBwRm9ybVV0aWxzLnNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9scywgY29udHJvbE5hbWUsIHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
@@ -21,7 +21,15 @@ export class GeolocationUtils {
21
21
  static isNilOrInvalid(position, opts) {
22
22
  return !GeolocationUtils.isNotNilAndValid(position, opts);
23
23
  }
24
+ /**
25
+ * @deprecated Use computeDistanceInNauticalMiles instead
26
+ * @param position1
27
+ * @param position2
28
+ */
24
29
  static computeDistanceInMiles(position1, position2) {
30
+ return GeolocationUtils.computeDistanceInNauticalMiles(position1, position2);
31
+ }
32
+ static computeDistanceInNauticalMiles(position1, position2) {
25
33
  // Invalid position(s): skip
26
34
  if (GeolocationUtils.isNilOrInvalid(position1, { debug: true }) || GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
27
35
  return;
@@ -83,4 +91,4 @@ export class GeolocationUtils {
83
91
  });
84
92
  }
85
93
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sU0FBUztJQUNwQixRQUFRLENBQVM7SUFDakIsU0FBUyxDQUFTO0NBQ25CO0FBRUQsTUFBTSxPQUFnQixnQkFBZ0I7SUFDcEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQW1CLEVBQUUsSUFBMEI7UUFDckUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFckYsa0JBQWtCO1FBQ2xCLElBQUksUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDL0csaURBQWlEO1lBQ2pELElBQUksSUFBSSxFQUFFLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFtQixFQUFFLElBQTBCO1FBQ25FLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFB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IFBvc2l0aW9uIH0gZnJvbSAnQGNhcGFjaXRvci9nZW9sb2NhdGlvbic7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBJUG9zaXRpb24ge1xuICBsYXRpdHVkZTogbnVtYmVyO1xuICBsb25naXR1ZGU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlb2xvY2F0aW9uVXRpbHMge1xuICBzdGF0aWMgaXNOb3ROaWxBbmRWYWxpZChwb3NpdGlvbjogSVBvc2l0aW9uLCBvcHRzPzogeyBkZWJ1Zz86IGJvb2xlYW4gfSkge1xuICAgIGlmICghcG9zaXRpb24gfHwgaXNOaWwocG9zaXRpb24ubGF0aXR1ZGUpIHx8IGlzTmlsKHBvc2l0aW9uLmxvbmdpdHVkZSkpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEludmFsaWQgbGF0L2xvblxuICAgIGlmIChwb3NpdGlvbi5sYXRpdHVkZSA8IC05MCB8fCBwb3NpdGlvbi5sYXRpdHVkZSA+IDkwIHx8IHBvc2l0aW9uLmxvbmdpdHVkZSA8IC0xODAgfHwgcG9zaXRpb24ubG9uZ2l0dWRlID4gMTgwKSB7XG4gICAgICAvLyAvIVxcIExvZyBpbiBjb25zb2xlLCBiZWNhdXNlIHNob3VsZCBuZXZlciBvY2N1clxuICAgICAgaWYgKG9wdHM/LmRlYnVnKSBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGF0L2xvbmcgcG9zaXRpb246ICAnLCBwb3NpdGlvbik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IHZhbGlkXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgaXNOaWxPckludmFsaWQocG9zaXRpb246IElQb3NpdGlvbiwgb3B0cz86IHsgZGVidWc/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gIUdlb2xvY2F0aW9uVXRpbHMuaXNOb3ROaWxBbmRWYWxpZChwb3NpdGlvbiwgb3B0cyk7XG4gIH1cblxuICBzdGF0aWMgY29tcHV0ZURpc3RhbmNlSW5NaWxlcyhwb3NpdGlvbjE6IElQb3NpdGlvbiwgcG9zaXRpb24yOiBJUG9zaXRpb24pOiBudW1iZXIge1xuICAgIC8vIEludmFsaWQgcG9zaXRpb24ocyk6IHNraXBcbiAgICBpZiAoR2VvbG9jYXRpb25VdGlscy5pc05pbE9ySW52YWxpZChwb3NpdGlvbjEsIHsgZGVidWc6IHRydWUgfSkgfHwgR2VvbG9jYXRpb25VdGlscy5pc05pbE9ySW52YWxpZChwb3NpdGlvbjIsIHsgZGVidWc6IHRydWUgfSkpIHJldHVybjtcblxuICAgIGNvbnN0IGxhdGl0dWRlMVJhZCA9IChNYXRoLlBJICogcG9zaXRpb24xLmxhdGl0dWRlKSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUxUmFkID0gKE1hdGguUEkgKiBwb3NpdGlvbjEubG9uZ2l0dWRlKSAvIDE4MDtcbiAgICBjb25zdCBsYXRpdHVkZTJSYWQgPSAoTWF0aC5QSSAqIHBvc2l0aW9uMi5sYXRpdHVkZSkgLyAxODA7XG4gICAgY29uc3QgbG9uZ2l0dWRlMlJhZCA9IChNYXRoLlBJICogcG9zaXRpb24yLmxvbmdpdHVkZSkgLyAxODA7XG5cbiAgICBsZXQgZGlzdGFuY2UgPVxuICAgICAgMiAqXG4gICAgICA2MzcxICpcbiAgICAgIE1hdGguYXNpbihcbiAgICAgICAgTWF0aC5zcXJ0KFxuICAgICAgICAgIE1hdGgucG93KE1hdGguc2luKChsYXRpdHVkZTFSYWQgLSBsYXRpdHVkZTJSYWQpIC8gMiksIDIpICtcbiAgICAgICAgICAgIE1hdGguY29zKGxhdGl0dWRlMVJhZCkgKiBNYXRoLmNvcyhsYXRpdHVkZTJSYWQpICogTWF0aC5wb3coTWF0aC5zaW4oKGxvbmdpdHVkZTJSYWQgLSBsb25naXR1ZGUxUmFkKSAvIDIpLCAyKVxuICAgICAgICApXG4gICAgICApO1xuICAgIGRpc3RhbmNlID0gTWF0aC5yb3VuZCgoZGlzdGFuY2UgLyAxLjg1MiArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkgLyAxMDA7XG4gICAgcmV0dXJuIGRpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zaXRpb24gYnkgZ2VvIGxvYyBzZW5zb3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRDdXJyZW50UG9zaXRpb24ocGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSB8IFBsYXRmb3JtLCBvcHRpb25zPzogUG9zaXRpb25PcHRpb25zKTogUHJvbWlzZTxJUG9zaXRpb24+IHtcbiAgICAvLyBVc2UgQ2FwYWNpdG9yIHBsdWdpblxuICAgIGlmIChwbGF0Zm9ybS5pcygnY2FwYWNpdG9yJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2dlb2xvY2F0aW9uLXV0aWxzXSBHZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIENhcGFjaXRvci4uLih0aW1lb3V0OiAke29wdGlvbnM/LnRpbWVvdXR9KWApO1xuICAgICAgICBjb25zdCBwb3M6IFBvc2l0aW9uID0gYXdhaXQgR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gPElQb3NpdGlvbj57XG4gICAgICAgICAgbGF0aXR1ZGU6IHBvcy5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgbG9uZ2l0dWRlOiBwb3MuY29vcmRzLmxvbmdpdHVkZSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbZ2VvbG9jYXRpb24tdXRpbHNdIENhbm5vdCBnZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIENhcGFjaXRvcjogJHtlcnI/Lm1lc3NhZ2UgfHwgJyd9YCk7XG5cbiAgICAgICAgLy8gRGV0ZWN0IHNvbWUgZXJyb3IsIHRvIGFkZCBjb2RlXG4gICAgICAgIC8vIEZJWE1FIC0gQ2FwYWNpdG9yIHVzZSBoYXJkY29kZWQgc3RyaW5ncyEgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vaW9uaWMtdGVhbS9jYXBhY2l0b3ItcGx1Z2lucylcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICgoZXJyPy5tZXNzYWdlIHx8ICcnKSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgLy8gUGVybWlzc2lvbiBkZW5pZWRcbiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ2xvY2F0aW9uIHBlcm1pc3Npb24gd2FzIGRlbmllZCcpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ2xvY2F0aW9uIGRpc2FibGVkJykpIHtcbiAgICAgICAgICB0aHJvdyB7IC4uLmVyciwgY29kZTogR2VvbG9jYXRpb25Qb3NpdGlvbkVycm9yLlBFUk1JU1NJT05fREVOSUVEIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaW1lb3V0XG4gICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCd0aW1lb3V0IGV4cGlyZWQnKSkge1xuICAgICAgICAgIHRocm93IHsgLi4uZXJyLCBjb2RlOiBHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3IuVElNRU9VVCB9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBmYWxsYmFjayB0byBuYXZpZ2F0b3JcbiAgICBjb25zb2xlLmluZm8oJ1tnZW9sb2NhdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBicm93c2VyLi4uJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPElQb3NpdGlvbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoPElQb3NpdGlvbj57XG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzLmNvb3Jkcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzLmNvb3Jkcy5sb25naXR1ZGUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9IGVycj8ubWVzc2FnZSB8fCBlcnI7XG4gICAgICAgICAgbWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZ2VvbG9jYXRpb24tdXRpbHNdIENhbm5vdCBnZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIGJyb3dzZXI6JyArIG1lc3NhZ2UpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyQyxNQUFNLE9BQU8sU0FBUztJQUNwQixRQUFRLENBQVM7SUFDakIsU0FBUyxDQUFTO0NBQ25CO0FBRUQsTUFBTSxPQUFnQixnQkFBZ0I7SUFDcEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQW1CLEVBQUUsSUFBMEI7UUFDckUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFckYsa0JBQWtCO1FBQ2xCLElBQUksUUFBUSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDL0csaURBQWlEO1lBQ2pELElBQUksSUFBSSxFQUFFLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFtQixFQUFFLElBQTBCO1FBQ25FLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFB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TSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9sb2NhdGlvbiwgUG9zaXRpb24gfSBmcm9tICdAY2FwYWNpdG9yL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGNsYXNzIElQb3NpdGlvbiB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VvbG9jYXRpb25VdGlscyB7XG4gIHN0YXRpYyBpc05vdE5pbEFuZFZhbGlkKHBvc2l0aW9uOiBJUG9zaXRpb24sIG9wdHM/OiB7IGRlYnVnPzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKCFwb3NpdGlvbiB8fCBpc05pbChwb3NpdGlvbi5sYXRpdHVkZSkgfHwgaXNOaWwocG9zaXRpb24ubG9uZ2l0dWRlKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gSW52YWxpZCBsYXQvbG9uXG4gICAgaWYgKHBvc2l0aW9uLmxhdGl0dWRlIDwgLTkwIHx8IHBvc2l0aW9uLmxhdGl0dWRlID4gOTAgfHwgcG9zaXRpb24ubG9uZ2l0dWRlIDwgLTE4MCB8fCBwb3NpdGlvbi5sb25naXR1ZGUgPiAxODApIHtcbiAgICAgIC8vIC8hXFwgTG9nIGluIGNvbnNvbGUsIGJlY2F1c2Ugc2hvdWxkIG5ldmVyIG9jY3VyXG4gICAgICBpZiAob3B0cz8uZGVidWcpIGNvbnNvbGUud2FybignSW52YWxpZCBsYXQvbG9uZyBwb3NpdGlvbjogICcsIHBvc2l0aW9uKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPSzogdmFsaWRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBpc05pbE9ySW52YWxpZChwb3NpdGlvbjogSVBvc2l0aW9uLCBvcHRzPzogeyBkZWJ1Zz86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiAhR2VvbG9jYXRpb25VdGlscy5pc05vdE5pbEFuZFZhbGlkKHBvc2l0aW9uLCBvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29tcHV0ZURpc3RhbmNlSW5OYXV0aWNhbE1pbGVzIGluc3RlYWRcbiAgICogQHBhcmFtIHBvc2l0aW9uMVxuICAgKiBAcGFyYW0gcG9zaXRpb24yXG4gICAqL1xuICBzdGF0aWMgY29tcHV0ZURpc3RhbmNlSW5NaWxlcyhwb3NpdGlvbjE6IElQb3NpdGlvbiwgcG9zaXRpb24yOiBJUG9zaXRpb24pOiBudW1iZXIge1xuICAgIHJldHVybiBHZW9sb2NhdGlvblV0aWxzLmNvbXB1dGVEaXN0YW5jZUluTmF1dGljYWxNaWxlcyhwb3NpdGlvbjEsIHBvc2l0aW9uMik7XG4gIH1cblxuICBzdGF0aWMgY29tcHV0ZURpc3RhbmNlSW5OYXV0aWNhbE1pbGVzKHBvc2l0aW9uMTogSVBvc2l0aW9uLCBwb3NpdGlvbjI6IElQb3NpdGlvbik6IG51bWJlciB7XG5cbiAgICAvLyBJbnZhbGlkIHBvc2l0aW9uKHMpOiBza2lwXG4gICAgaWYgKEdlb2xvY2F0aW9uVXRpbHMuaXNOaWxPckludmFsaWQocG9zaXRpb24xLCB7IGRlYnVnOiB0cnVlIH0pIHx8IEdlb2xvY2F0aW9uVXRpbHMuaXNOaWxPckludmFsaWQocG9zaXRpb24yLCB7IGRlYnVnOiB0cnVlIH0pKSByZXR1cm47XG5cbiAgICBjb25zdCBsYXRpdHVkZTFSYWQgPSAoTWF0aC5QSSAqIHBvc2l0aW9uMS5sYXRpdHVkZSkgLyAxODA7XG4gICAgY29uc3QgbG9uZ2l0dWRlMVJhZCA9IChNYXRoLlBJICogcG9zaXRpb24xLmxvbmdpdHVkZSkgLyAxODA7XG4gICAgY29uc3QgbGF0aXR1ZGUyUmFkID0gKE1hdGguUEkgKiBwb3NpdGlvbjIubGF0aXR1ZGUpIC8gMTgwO1xuICAgIGNvbnN0IGxvbmdpdHVkZTJSYWQgPSAoTWF0aC5QSSAqIHBvc2l0aW9uMi5sb25naXR1ZGUpIC8gMTgwO1xuXG4gICAgbGV0IGRpc3RhbmNlID1cbiAgICAgIDIgKlxuICAgICAgNjM3MSAqXG4gICAgICBNYXRoLmFzaW4oXG4gICAgICAgIE1hdGguc3FydChcbiAgICAgICAgICBNYXRoLnBvdyhNYXRoLnNpbigobGF0aXR1ZGUxUmFkIC0gbGF0aXR1ZGUyUmFkKSAvIDIpLCAyKSArXG4gICAgICAgICAgICBNYXRoLmNvcyhsYXRpdHVkZTFSYWQpICogTWF0aC5jb3MobGF0aXR1ZGUyUmFkKSAqIE1hdGgucG93KE1hdGguc2luKChsb25naXR1ZGUyUmFkIC0gbG9uZ2l0dWRlMVJhZCkgLyAyKSwgMilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICBkaXN0YW5jZSA9IE1hdGgucm91bmQoKGRpc3RhbmNlIC8gMS44NTIgKyBOdW1iZXIuRVBTSUxPTikgKiAxMDApIC8gMTAwO1xuICAgIHJldHVybiBkaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc2l0aW9uIGJ5IGdlbyBsb2Mgc2Vuc29yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0Q3VycmVudFBvc2l0aW9uKHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UgfCBQbGF0Zm9ybSwgb3B0aW9ucz86IFBvc2l0aW9uT3B0aW9ucyk6IFByb21pc2U8SVBvc2l0aW9uPiB7XG4gICAgLy8gVXNlIENhcGFjaXRvciBwbHVnaW5cbiAgICBpZiAocGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtnZW9sb2NhdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBDYXBhY2l0b3IuLi4odGltZW91dDogJHtvcHRpb25zPy50aW1lb3V0fSlgKTtcbiAgICAgICAgY29uc3QgcG9zOiBQb3NpdGlvbiA9IGF3YWl0IEdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIDxJUG9zaXRpb24+e1xuICAgICAgICAgIGxhdGl0dWRlOiBwb3MuY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICAgIGxvbmdpdHVkZTogcG9zLmNvb3Jkcy5sb25naXR1ZGUsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2dlb2xvY2F0aW9uLXV0aWxzXSBDYW5ub3QgZ2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBDYXBhY2l0b3I6ICR7ZXJyPy5tZXNzYWdlIHx8ICcnfWApO1xuXG4gICAgICAgIC8vIERldGVjdCBzb21lIGVycm9yLCB0byBhZGQgY29kZVxuICAgICAgICAvLyBGSVhNRSAtIENhcGFjaXRvciB1c2UgaGFyZGNvZGVkIHN0cmluZ3MhIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2lvbmljLXRlYW0vY2FwYWNpdG9yLXBsdWdpbnMpXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAoKGVycj8ubWVzc2FnZSB8fCAnJykgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIC8vIFBlcm1pc3Npb24gZGVuaWVkXG4gICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKCdsb2NhdGlvbiBwZXJtaXNzaW9uIHdhcyBkZW5pZWQnKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCdsb2NhdGlvbiBkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgdGhyb3cgeyAuLi5lcnIsIGNvZGU6IEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvci5QRVJNSVNTSU9OX0RFTklFRCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGltZW91dFxuICAgICAgICBpZiAobWVzc2FnZS5pbmNsdWRlcygndGltZW91dCBleHBpcmVkJykpIHtcbiAgICAgICAgICB0aHJvdyB7IC4uLmVyciwgY29kZTogR2VvbG9jYXRpb25Qb3NpdGlvbkVycm9yLlRJTUVPVVQgfTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3IgZmFsbGJhY2sgdG8gbmF2aWdhdG9yXG4gICAgY29uc29sZS5pbmZvKCdbZ2VvbG9jYXRpb24tdXRpbHNdIEdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgYnJvd3Nlci4uLicpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJUG9zaXRpb24+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oXG4gICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKDxJUG9zaXRpb24+e1xuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlcy5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlcy5jb29yZHMubG9uZ2l0dWRlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgbGV0IG1lc3NhZ2UgPSBlcnI/Lm1lc3NhZ2UgfHwgZXJyO1xuICAgICAgICAgIG1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycgPyBtZXNzYWdlIDogSlNPTi5zdHJpbmdpZnkobWVzc2FnZSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW2dlb2xvY2F0aW9uLXV0aWxzXSBDYW5ub3QgZ2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBicm93c2VyOicgKyBtZXNzYWdlKTtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -363,11 +363,8 @@ export class SharedFormGroupValidators {
363
363
  const predicate = opts?.predicate || ((control) => isNotNilOrBlank(control?.value));
364
364
  return (group) => {
365
365
  const control = group.get(fieldName);
366
- // Workaround - When control is missing (can occur when form has been upgrade, but the validator is still on the form group)
367
- if (!control) {
368
- console.warn(`Unable to find control '${fieldName}' used by ShareFormGroupValidators.requiredIf validator!`);
369
- return null;
370
- }
366
+ if (!control)
367
+ throw new Error(`Unable to find control '${fieldName}' used by ShareFormGroupValidators.requiredIf validator!`);
371
368
  const anotherControl = anotherFieldToCheck instanceof AbstractControl ? anotherFieldToCheck : group.get(anotherFieldToCheck);
372
369
  if (!anotherControl)
373
370
  throw new Error(`Unable to find control ${typeof anotherFieldToCheck === 'string' ? anotherFieldToCheck + ' ' : ''}used by ShareFormGroupValidators.requiredIf validator!`);
@@ -623,4 +620,4 @@ export class SharedAsyncValidators {
623
620
  return subscription;
624
621
  }
625
622
  }
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEdBT2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBc0IsTUFBTSxRQUFRLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsb0JBQW9CLEdBQUc7UUFDcEMsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCO1FBQ3ZDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUI7UUFDN0MsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQjtLQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFtQjtRQUNoRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksQ0FB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YWN0Q29udHJvbCxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCwgdW5pdE9mVGltZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQVUJLRVlfUkVHRVhQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNOb3ROaWxPck5hTiwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHsgZGVsYXksIGZyb20sIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpcnN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZFZhbGlkYXRvcnMge1xuICBwcml2YXRlIHN0YXRpYyBfRE9VQkxFX1JFR0VYUF9DQUNIRSA9IHtcbiAgICBOT19MSU1JVDogL14tP1xcZCsoWy4sXVxcZCopPyQvLFxuICAgIDE6IC9eLT9cXGQrKFsuLF1cXGQpPyQvLCAvLyAxIGRlY2ltYWwgbWF4XG4gICAgMjogL14tP1xcZCsoWy4sXVxcZHsxLDJ9KT8kLywgLy8gMiBkZWNpbWFscyBtYXhcbiAgICAzOiAvXi0/XFxkKyhbLixdXFxkezEsM30pPyQvLCAvLyAzIGRlY2ltYWxzIG1heFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGdldERvdWJsZVJlZ2V4cChtYXhEZWNpbWFsczogbnVtYmVyKTogUmVnRXhwIHtcbiAgICBpZiAoaXNOaWwobWF4RGVjaW1hbHMpKSByZXR1cm4gdGhpcy5fRE9VQkxFX1JFR0VYUF9DQUNIRS5OT19MSU1JVDtcblxuICAgIGlmIChtYXhEZWNpbWFscyA8IDApIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYXhEZWNpbWFscyB2YWx1ZTogJHttYXhEZWNpbWFsc31gKTtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXTtcbiAgICBpZiAocmVnZXhwKSByZXR1cm4gcmVnZXhwO1xuXG4gICAgLy8gTmV3OiBhZGQgdG8gY2FjaGVcbiAgICB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXSA9IG5ldyBSZWdFeHAoYF4tP1xcXFxkKyhbLixdXFxcXGR7MSwke21heERlY2ltYWxzfX0pPyRgKTtcbiAgICByZXR1cm4gdGhpcy5fRE9VQkxFX1JFR0VYUF9DQUNIRVttYXhEZWNpbWFsc107XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG90aGVyQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG90aGVyQ29udHJvbCA9IGMucGFyZW50Py5nZXQob3RoZXJDb250cm9sTmFtZSk7XG4gICAgICBpZiAob3RoZXJDb250cm9sICYmIGMudmFsdWUgIT09IG90aGVyQ29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVxdWFsczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgSTE4Tl9FUlJPUl9LRVlTID0ge1xuICAgIHJlcXVpcmVkOiAnRVJST1IuRklFTERfUkVRVUlSRUQnLFxuICAgIG1pbjogJ0VSUk9SLkZJRUxEX01JTicsXG4gICAgbWF4OiAnRVJST1IuRklFTERfTUFYJyxcbiAgICBtaW5sZW5ndGg6ICdFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyxcbiAgICBtYXhsZW5ndGg6ICdFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyxcbiAgICBwdWJrZXk6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZJyxcbiAgICB2YWxpZERhdGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURScsXG4gICAgZGF0ZUlzQWZ0ZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicsXG4gICAgZGF0ZUlzQmVmb3JlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyxcbiAgICBkYXRlUmFuZ2U6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRScsXG4gICAgZGF0ZU1pbkR1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OJyxcbiAgICBkYXRlTWF4RHVyYXRpb246ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NQVhfRFVSQVRJT04nLFxuICAgIG1heERlY2ltYWxzOiAnRVJST1IuRklFTERfTUFYSU1VTV9ERUNJTUFMUycsXG4gICAgZGVjaW1hbDogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9ERUNJTUFMJyxcbiAgICBpbnRlZ2VyOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0lOVEVHRVInLFxuICAgIHByZWNpc2lvbjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QUkVDSVNJT04nLFxuICAgIGVtYWlsOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyxcbiAgICBsYXRpdHVkZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9MQVRJVFVERScsXG4gICAgbG9uZ2l0dWRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0xPTkdJVFVERScsXG4gICAgcGF0dGVybjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QQVRURVJOJyxcbiAgICB1bmlxdWU6ICdFUlJPUi5GSUVMRF9OT1RfVU5JUVVFJyxcbiAgICBlbnRpdHk6ICdFUlJPUi5GSUVMRF9JTlZBTElEJyxcbiAgICBpbnZhbGlkOiAnRVJST1IuRklFTERfSU5WQUxJRCcsXG4gICAgaW5jb25zaXN0ZW50OiAnRVJST1IuRklFTERfSU5DT05TSVNURU5UJyxcbiAgICBlcXVhbHM6ICdFUlJPUi5GSUVMRF9OT1RfRVFVQUxTJyxcbiAgfTtcblxuICBzdGF0aWMgbGF0aXR1ZGUoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmICh2YWx1ZSA8IC05MCB8fCB2YWx1ZSA+IDkwKSkge1xuICAgICAgcmV0dXJuIHsgbGF0aXR1ZGU6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgbG9uZ2l0dWRlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiAodmFsdWUgPCAtMTgwIHx8IHZhbHVlID4gMTgwKSkge1xuICAgICAgcmV0dXJuIHsgbG9uZ2l0dWRlOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIG9iamVjdChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4geyBvYmplY3Q6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW50aXR5KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGlzTmlsKHZhbHVlLmlkKSkpIHtcbiAgICAgIHJldHVybiB7IGVudGl0eTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbnRpdGllcyhjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmV2ZXJ5KChlKSA9PiBpc05pbChlPy5pZCkpKSkge1xuICAgICAgcmV0dXJuIHsgZW50aXR5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGVtcHR5KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBlbXB0eTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBwdWJrZXkoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIVBVQktFWV9SRUdFWFAudGVzdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4geyBwdWJrZXk6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgaW50ZWdlcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmIChpc05hTih2YWx1ZSkgfHwgKHZhbHVlIHwgMCkgIT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4geyBpbnRlZ2VyOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRlY2ltYWwob3B0cz86IHsgbWF4RGVjaW1hbHM/OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLmdldERvdWJsZVJlZ2V4cChvcHRzPy5tYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBHZXR0aW5nIGEgTmFOIHZhbHVlIChkZWNpbWFsIHdhcyBleHBlY3RlZCkgIVwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIHZhbHVlICE9PSAnJyAmJiAhcmVnZXhwLnRlc3QodmFsdWUgYXMgc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gaXNOb3ROaWwob3B0cz8ubWF4RGVjaW1hbHMpID8geyBtYXhEZWNpbWFsczogeyBtYXhEZWNpbWFsczogb3B0cy5tYXhEZWNpbWFscyB9IH0gOiB7IGRlY2ltYWw6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgcHJlY2lzaW9uLiBlLmcuIGlmIHByZWNpc2lvbj0wLjUgdGhlbiB2YWx1ZT0wLjYgaXMgaW52YWxpZCwgYnV0IDEuNSBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uXG4gICAqL1xuICBzdGF0aWMgcHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmIChpc05pbChwcmVjaXNpb24pKSB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIGEgbm90IG5pbCBwcmVjaXNpb24nKTtcblxuICAgIC8vIFdBUk46IHdlIHNob3VsZCBkZWZpbmUgYSBtdWx0aXBsaWVyLCBiZWNhdXNlIG1vZHVsbyBpbiBqYXZhc2NyaXB0IHdpbGwgb25seSB3b3JrIG9uIGludGVnZXJcbiAgICAvLyAoZS5nLiBcIjcgJSAwLjFcIiBpbiBqYXZhc2NyaXB0IHdpbGwgTk9UIHJldHVybiB6ZXJvIChidXQgMC4wOTk5OTk5OTk5OTk5OTk2MilcbiAgICBjb25zdCBwcmVjaXNpb25OYkRlY2ltYWxzID0gKHByZWNpc2lvbi50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aDtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbk5iRGVjaW1hbHMpO1xuICAgIGNvbnN0IG11bHRpcGxpZWRQcmVjaXNpb24gPSBNYXRoLnJvdW5kKG11bHRpcGxpZXIgKiBwcmVjaXNpb24pO1xuXG4gICAgLy8gVGhlIHZhbGlkYXRvciBmdW5jdGlvblxuICAgIHJldHVybiAoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkgfHwgTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFdBUk46IENvbnZlcnQgdmFsdWUgaW50byBpbnRlZ2VyLCBiZWZvcmUgYXBwbHlpbmcgbW9kdWxvIG9wZXJhdG9yXG4gICAgICBjb25zdCBtb2QgPSBNYXRoLnJvdW5kKCt2YWx1ZSAqIG11bHRpcGxpZXIpICUgbXVsdGlwbGllZFByZWNpc2lvbjtcbiAgICAgIGlmIChtb2QgIT09IDApIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKGBXQVJOIEdldHRpbmcgYSAke3ZhbHVlfSB3aXRoIGFuIGludmFsaWQgcHJlY2lzaW9uIChleHBlY3RlZCBwcmVjaXNpb24gaXM6ICR7cHJlY2lzaW9ufSlgKTtcbiAgICAgICAgcmV0dXJuIHsgcHJlY2lzaW9uOiB7IHByZWNpc2lvbiB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkRGF0ZVRpbWUocmVxdWlyZWRUaW1lID0gdHJ1ZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGNvbnN0IGRhdGUgPSAhdmFsdWUgfHwgaXNNb21lbnQodmFsdWUpID8gdmFsdWUgOiBmcm9tRGF0ZUlTT1N0cmluZyh2YWx1ZSk7XG4gICAgICBpZiAoZGF0ZSAmJiAoIWRhdGUuaXNWYWxpZCgpIHx8IGRhdGUueWVhcigpIDwgMTkwMCB8fCAocmVxdWlyZWRUaW1lICYmIERhdGVVdGlscy5pc05vVGltZShkYXRlKSkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkRGF0ZTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZERhdGUgPSBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZVRpbWUodHJ1ZSk7XG4gIHN0YXRpYyB2YWxpZERhdGVBbGxvd05vVGltZSA9IFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlVGltZShmYWxzZSk7XG5cbiAgc3RhdGljIGRhdGVJc0FmdGVyKHByZXZpb3VzVmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKHByZXZpb3VzVmFsdWUpICYmIHZhbHVlLmlzU2FtZU9yQmVmb3JlKHByZXZpb3VzVmFsdWUsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yXG4gICAgICAgIHJldHVybiB7IGRhdGVJc0FmdGVyOiB7IG1pbkRhdGU6IGVycm9yUGFyYW0gfSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlSXNCZWZvcmUobWF4VmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKG1heFZhbHVlKSAmJiB2YWx1ZS5pc1NhbWVPckFmdGVyKG1heFZhbHVlLCBncmFudWxhcml0eSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4geyBkYXRlSXNCZWZvcmU6IHsgbWF4RGF0ZTogZXJyb3JQYXJhbSB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZUVuZChzdGFydERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgZXJyb3IgPSBtc2cgPyB7IG1zZyB9IDogeyBkYXRlUmFuZ2U6IHRydWUgfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIEZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0OiBza2lwXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3Qgc3RhcnRDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHN0YXJ0RGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGJyb3RoZXIgY29udHJvbCAnJHtzdGFydERhdGVGaWVsZE5hbWV9JyBpbiB0aGUgcGFyZW50IGZvcm1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzdGFydENvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKGVuZERhdGUpICYmIGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgZW5kRGF0ZS5pc1NhbWVPckJlZm9yZShzdGFydERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlUmFuZ2VTdGFydChlbmREYXRlRmllbGROYW1lOiBzdHJpbmcsIG1zZz86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBtc2cgPyAnbXNnJyA6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IGVycm9yID0gbXNnID8geyBtc2cgfSA6IHsgZGF0ZVJhbmdlOiB0cnVlIH07XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAvLyBGb3JtIGdyb3VwIG5vdCBjcmVhdGVkIHlldDogc2tpcFxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGVuZERhdGVDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGVuZERhdGVGaWVsZE5hbWUpO1xuICAgICAgaWYgKCFlbmREYXRlQ29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGNvbnRyb2wgJyR7ZW5kRGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmREYXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIC8vIEVycm9yIGlmIHZhbHVlIDw9IGJlZm9yZURhdGVcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIHN0YXJ0RGF0ZS5pc1NhbWVPckFmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5UGFyZW50RXJyb3JzKGVycm9yTmFtZXM/OiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIFNraXAgaWYgY29udHJvbCBhbHJlYWR5IGhhcyBzb21lIGVycm9yc1xuICAgICAgaWYgKGNvbnRyb2wuZXJyb3JzKSByZXR1cm4gbnVsbDtcbiAgICAgIC8vIFNraXAgaWYgcGFyZW50IGZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gRm9ybSBncm91cCBub3QgY3JlYXRlZCB5ZXRcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLnBhcmVudC5lcnJvcnM7XG5cbiAgICAgIC8vIE5vIGVycm9ycywgb3IgY29weSBhbGwgZXJyb3JzXG4gICAgICBpZiAoIWVycm9ycyB8fCBpc0VtcHR5QXJyYXkoZXJyb3JOYW1lcykpIHJldHVybiBlcnJvcnM7XG5cbiAgICAgIC8vIENvcHkgb25seSBleHBlY3RlZCBlcnJvcnNcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGVycm9yTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHJlc1trZXldID0gZXJyb3JzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNsZWFyRXJyb3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvckNvZGU6IHN0cmluZykge1xuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSkpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnNbZXJyb3JDb2RlXSkge1xuICAgICAgICAvLyBPbmx5IG9uZSBlcnJvcjogcmVzZXQgZXJyb3JzXG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcnMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIGVycm9ycyBleGlzdHM6IGp1c3QgcmVtb3ZlIHRoaXMgZXJyb3JcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGVycm9yc1tlcnJvckNvZGVdO1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRGb3JtR3JvdXBWYWxpZGF0b3JzIHtcbiAgc3RhdGljIGRhdGVSYW5nZShcbiAgICBzdGFydERhdGVGaWVsZDogc3RyaW5nLFxuICAgIGVuZERhdGVGaWVsZDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IG1zZz86IHN0cmluZzsgZmllbGRPbmx5PzogYm9vbGVhbjsgc2tpcElmTm9UaW1lPzogYm9vbGVhbiB9IHwgc3RyaW5nXG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBtc2cgPSB0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycgPyBvcHRzIDogb3B0cz8ubXNnO1xuICAgIGNvbnN0IGZpZWxkT25seSA9IHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyA/IG9wdHM/LmZpZWxkT25seSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBza2lwSWZOb1RpbWUgPSB0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgPyBvcHRzPy5za2lwSWZOb1RpbWUgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBpc05vdE5pbE9yQmxhbmsobXNnKSA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgcmFuZ2VFcnJvciA9IG1zZyA/IHsgbXNnIH0gOiB7IGRhdGVSYW5nZTogdHJ1ZSB9O1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuXG4gICAgICBjb25zdCBoYXNTdGFydERhdGUgPSBpc05vdE5pbChzdGFydERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShzdGFydERhdGUpKTtcbiAgICAgIGNvbnN0IGhhc0VuZERhdGUgPSBpc05vdE5pbChlbmREYXRlKSAmJiAoIXNraXBJZk5vVGltZSB8fCBEYXRlVXRpbHMuaXNOb1RpbWUoZW5kRGF0ZSkpO1xuICAgICAgaWYgKGhhc1N0YXJ0RGF0ZSAmJiBoYXNFbmREYXRlICYmIHN0YXJ0RGF0ZS5pc0FmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5yYW5nZUVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIHBhcmVudCBmb3JtLCBieSBkZWZhdWx0KVxuICAgICAgICByZXR1cm4gZmllbGRPbmx5ID8gbnVsbCA6IHJhbmdlRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVNYXhEdXJhdGlvbihcbiAgICBzdGFydERhdGVGaWVsZDogc3RyaW5nLFxuICAgIGVuZERhdGVGaWVsZDogc3RyaW5nLFxuICAgIG1heER1cmF0aW9uOiBudW1iZXIsXG4gICAgZHVyYXRpb25Vbml0PzogbW9tZW50LnVuaXRPZlRpbWUuRGlmZixcbiAgICBvcHRzPzogeyBza2lwSWZOb1RpbWU/OiBib29sZWFuIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IG1heER1cmF0aW9uRXJyb3IgPSB7IGRhdGVNYXhEdXJhdGlvbjogdHJ1ZSB9O1xuICAgIGNvbnN0IHNraXBJZk5vVGltZSA9IG9wdHM/LnNraXBJZk5vVGltZTtcblxuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuXG4gICAgICBjb25zdCBoYXNTdGFydERhdGUgPSBpc05vdE5pbChzdGFydERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShzdGFydERhdGUpKTtcbiAgICAgIGNvbnN0IGhhc0VuZERhdGUgPSBpc05vdE5pbChlbmREYXRlKSAmJiAoIXNraXBJZk5vVGltZSB8fCBEYXRlVXRpbHMuaXNOb1RpbWUoZW5kRGF0ZSkpO1xuXG4gICAgICBpZiAoaGFzU3RhcnREYXRlICYmIGhhc0VuZERhdGUgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPiBtYXhEdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5tYXhEdXJhdGlvbkVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIG1heER1cmF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWF4RHVyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1pbkR1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtaW5EdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPCBtaW5EdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGNvbnN0IGVuZEZpZWxkRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZW5kRmllbGQuZXJyb3JzIHx8IHt9O1xuICAgICAgICBlbmRGaWVsZEVycm9yc1snZGF0ZU1pbkR1cmF0aW9uJ10gPSB0cnVlO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoZW5kRmllbGRFcnJvcnMpO1xuICAgICAgICBlbmRGaWVsZC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiB7IGRhdGVNaW5EdXJhdGlvbjogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gdGhlIGVuZCBmaWVsZFxuICAgICAgZWxzZSB7XG4gICAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgJ2RhdGVNaW5EdXJhdGlvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgICAgcHJlZGljYXRlPzogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gYm9vbGVhbjtcbiAgICB9XG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBpc0VtcHR5ID0gb3B0cz8uaXNFbXB0eSB8fCAoKGNvbnRyb2wpID0+IGlzTmlsT3JCbGFuayhjb250cm9sPy52YWx1ZSkpO1xuICAgIGNvbnN0IHByZWRpY2F0ZSA9IG9wdHM/LnByZWRpY2F0ZSB8fCAoKGNvbnRyb2wpID0+IGlzTm90TmlsT3JCbGFuayhjb250cm9sPy52YWx1ZSkpO1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICAvLyBXb3JrYXJvdW5kIC0gV2hlbiBjb250cm9sIGlzIG1pc3NpbmcgKGNhbiBvY2N1ciB3aGVuIGZvcm0gaGFzIGJlZW4gdXBncmFkZSwgYnV0IHRoZSB2YWxpZGF0b3IgaXMgc3RpbGwgb24gdGhlIGZvcm0gZ3JvdXApXG4gICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmFibGUgdG8gZmluZCBjb250cm9sICcke2ZpZWxkTmFtZX0nIHVzZWQgYnkgU2hhcmVGb3JtR3JvdXBWYWxpZGF0b3JzLnJlcXVpcmVkSWYgdmFsaWRhdG9yIWApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbm90aGVyQ29udHJvbCA9IGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wgPyBhbm90aGVyRmllbGRUb0NoZWNrIDogZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spO1xuICAgICAgaWYgKCFhbm90aGVyQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBjb250cm9sICR7dHlwZW9mIGFub3RoZXJGaWVsZFRvQ2hlY2sgPT09ICdzdHJpbmcnID8gYW5vdGhlckZpZWxkVG9DaGVjayAgKyAnICcgOiAnJ311c2VkIGJ5IFNoYXJlRm9ybUdyb3VwVmFsaWRhdG9ycy5yZXF1aXJlZElmIHZhbGlkYXRvciFgKTtcbiAgICAgIGlmIChpc0VtcHR5KGNvbnRyb2wpICYmIHByZWRpY2F0ZShhbm90aGVyQ29udHJvbCkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBvcHRzPy5maWVsZE9ubHkgPyBudWxsIDogZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWZUcnVlKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgYW5vdGhlckNvbnRyb2wgPSBhbm90aGVyRmllbGRUb0NoZWNrIGluc3RhbmNlb2YgQWJzdHJhY3RDb250cm9sID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNFbXB0eShjb250cm9sKSAmJiB0b0Jvb2xlYW4oYW5vdGhlckNvbnRyb2wudmFsdWUsIGZhbHNlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIG9wdHM/LmZpZWxkT25seSA/IG51bGwgOiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZkVtcHR5KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGlzRW1wdHkoY29udHJvbCkgJiYgaXNOaWxPckJsYW5rKGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKS52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBvcHRzPy5maWVsZE9ubHkgPyBudWxsIDogZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHByb3BhZ2F0ZUlmRGlydHkoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkTmFtZVRvUHJvcGFnYXRlOiBzdHJpbmcsIHZhbHVlVG9Qcm9wYWdhdGU6IGFueSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBjb250cm9sVG9Qcm9wYWdhdGUgPSBncm91cC5nZXQoZmllbGROYW1lVG9Qcm9wYWdhdGUpO1xuICAgICAgaWYgKGNvbnRyb2wuZGlydHkgJiYgY29udHJvbFRvUHJvcGFnYXRlLnZhbHVlICE9PSB2YWx1ZVRvUHJvcGFnYXRlKSB7XG4gICAgICAgIGNvbnRyb2xUb1Byb3BhZ2F0ZS5zZXRWYWx1ZSh2YWx1ZVRvUHJvcGFnYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBhcyBjb21wb3NlLCBidXQga2VlcCBvbmx5IHRoZSBmaXJzdCBlcnJvcnMgKGluc3RlYWQgb2YgdGhlIHVuaW9uKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yc1xuICAgKi9cbiAgZmlyc3QodmFsaWRhdG9yczogKFZhbGlkYXRvckZuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+XG4gICAgICB2YWxpZGF0b3JzXG4gICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yKGNvbnRyb2wpKVxuICAgICAgICAuZmluZChpc05vdE5pbCkgfHwgbnVsbDtcbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMge1xuICAvKipcbiAgICogVmFsaWRhdGUgdW5pcXVlbmVzcyBvZiBhbiBlbnRpdHkgaW4gYSBGb3JtQXJyYXlcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKi9cbiAgc3RhdGljIHVuaXF1ZUVudGl0eShjb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgLy8gZ2F0aGVyIGNvbnRyb2xzIGluIGFycmF5IHdpdGggdmFsaWQgZW50aXR5XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCEhdmFsdWUgJiYgISF2YWx1ZS5pZCkgY29udHJvbHMucHVzaChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IG9jY3VycmVuY2VzIG9mIGVudGl0eSBieSBpZFxuICAgICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRyb2xzLnJlZHVjZSgoYWNjLCBjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBjb250cm9sLnZhbHVlLmlkO1xuICAgICAgICAgIGlmIChhY2NbaWRdKSBhY2NbaWRdKys7XG4gICAgICAgICAgZWxzZSBhY2NbaWRdID0gMTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIC8vIGdldCBjb250cm9scyB3aXRoIHZhbHVlIG9jY3VycmVuY2VzID4gMVxuICAgICAgICBjb25zdCBlcnJvciA9IHsgdW5pcXVlRW50aXR5OiB0cnVlIH07XG4gICAgICAgIGxldCByZXR1cm5FcnJvciA9IGZhbHNlO1xuICAgICAgICBjb250cm9sc1xuICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IG9jY3VycmVuY2VzW2NvbnRyb2wudmFsdWUuaWRdID4gMSlcbiAgICAgICAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm5FcnJvciA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXR1cm5FcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4gU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICd1bmlxdWVFbnRpdHknKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkQXJyYXlNaW5MZW5ndGgobWluTGVuZ3RoPzogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCB8fCAxO1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWFycmF5IHx8IGFycmF5Lmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhcnJheU1heExlbmd0aChtYXhMZW5ndGg/OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDE7XG4gICAgcmV0dXJuIChhcnJheTogVW50eXBlZEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgbWF4TGVuZ3RoOiBtYXhMZW5ndGggfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN1bSBvZiBjb250cm9sIHZhbHVlcyBpbiBhbiBGb3JtQXJyYXkgbm90IG92ZXJmbG93IHRoZSBtYXggdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRTdW1NYXhWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCBtYXg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBVbnR5cGVkRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdID0gW107XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSAmJiBpc05vdE5pbE9yTmFOKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpKSB7XG4gICAgICAgICAgICBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbHMucmVkdWNlKChzdW0sIGNvbnRyb2wpID0+IHN1bSArIGNvbnRyb2wudmFsdWUsIDApID4gbWF4KSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSB7IHN1bU1heFZhbHVlOiB0cnVlIH07XG4gICAgICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3N1bU1heFZhbHVlJykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBPYnNlcnZhYmxlVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPjtcbmV4cG9ydCB0eXBlIFByb21pc2VWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEFzeW5jVmFsaWRhdG9ycyB7XG4gIHByaXZhdGUgc3RhdGljIERFQk9VTkNFX1RJTUVfVkFMSURBVE9SX0lEID0gMDtcblxuICAvKipcbiAgICogQWRkIGEgZGVib3VuY2UgdGltZSB0byBhIHZhbGlkYXRvci5cbiAgICpcbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBvcHRzLnN0b3BTdWJqZWN0IHRvIHN0b3AgdGhlIHZhbGlkYXRvciwgYmVmb3JlIGVuZFxuICAgKi9cbiAgc3RhdGljIGRlYm91bmNlVGltZShcbiAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgIG9wdHM/OiB7XG4gICAgICBkaXNwb3NlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IE9ic2VydmFibGVWYWxpZGF0b3JGbiB7XG4gICAgLy8gREVCVUcgb25seVxuICAgIGNvbnN0IGRlYnVnID0gb3B0cz8uZGVidWcgfHwgZmFsc2U7XG4gICAgY29uc3QgbG9nUHJlZml4ID0gZGVidWcgJiYgYFtkZWJvdW5jZVRpbWUtdmFsaWRhdG9yXSAjJHtTaGFyZWRBc3luY1ZhbGlkYXRvcnMuREVCT1VOQ0VfVElNRV9WQUxJREFUT1JfSUQrK30gLSBgO1xuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBOZXcgdmFsaWRhdG9yIHdpdGggYSBkZWJvdW5jZVRpbWUgYXQgJHtkZWJvdW5jZVRpbWV9bXNgKTtcblxuICAgIGNvbnN0ICRkaXNwb3NlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgZGlzcG9zZUV2ZW50JCA9IG9wdHM/LmRpc3Bvc2UgPyBtZXJnZSgkZGlzcG9zZVN1YmplY3QsIG9wdHM/LmRpc3Bvc2UpIDogJGRpc3Bvc2VTdWJqZWN0O1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcgJiYgb3B0cz8uZGlzcG9zZSkge1xuICAgICAgb3B0cz8uZGlzcG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ1N0b3BwaW5nJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRm9ybSBhc2sgdmFsaWRhdGlvbi4uLicpO1xuXG4gICAgICAvLyBTdG9wIHByZXZpb3VzIG9ic2VydmFibGVzXG4gICAgICAkZGlzcG9zZVN1YmplY3QubmV4dCgpO1xuICAgICAgbGV0IG5vdzogbnVtYmVyO1xuXG4gICAgICByZXR1cm4gb2YobnVsbCkucGlwZShcbiAgICAgICAgLy8gQWRkIGEgZGVsYXkgYmVmb3JlIGV4ZWN1dGlvblxuICAgICAgICBkZWxheShkZWJvdW5jZVRpbWUpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ0V4ZWN1dGluZy4uLicpO1xuICAgICAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSB2YWxpZGF0b3JcbiAgICAgICAgICBjb25zdCByZXMgPSB2YWxpZGF0b3JGbihjb250cm9sKTtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIGFuIE9ic2VydmFibGVcbiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHJldHVybiByZXM7XG4gICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBmcm9tKHJlcyk7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICB0YXAoKHJlcykgPT4gZGVidWcgJiYgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyBgRmluaXNoZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zICgke3JlcyA/ICd3aXRoIGVycm9ycycgOiAnbm8gZXJyb3InfSlgLCByZXMpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZGVib3VuY2VUaW1lLXZhbGlkYXRvcl0gRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHZhbGlkYXRvci4gU3RvcHBpbmcgam9iJywgZXJyb3IpO1xuICAgICAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBSZWZyZXNoIFVJLCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uXG4gICAgICAgIHRhcCgoKSA9PiBvcHRzPy5tYXJrRm9yQ2hlY2sgJiYgb3B0cz8ubWFya0ZvckNoZWNrKCkpLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc3RvcCwgYmVjYXVzZSBvZiB0aGUgc3dpdGNoTWFwXG4gICAgICAgIHRha2VVbnRpbChkaXNwb3NlRXZlbnQkKVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhc3luYyB2YWxpZGF0b3IsIHRoYXQgY2FuIGJlIGRpc3Bvc2VkIGJ5IHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb25cbiAgICpcbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuIHRoZSB2YWxpZGF0b3Igb3Igam9iIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHN0YXRpYyByZWdpc3RlckFzeW5jVmFsaWRhdG9yKFxuICAgIGZvcm06IEFic3RyYWN0Q29udHJvbCxcbiAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gICAgICBtYXJrRm9yQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH1cbiAgKTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAoZm9ybS5hc3luY1ZhbGlkYXRvcikgdGhyb3cgRXJyb3IoJ0Zvcm0gYWxyZWFkeSBoYXZlIGFuIGFzeW5jIHZhbGlkYXRvci4gQ2Fubm90IGNvbmZpZ3VyZSBqb2InKTtcblxuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcbiAgICBjb25zdCAkZGlzcG9zZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvckZuID0gU2hhcmVkQXN5bmNWYWxpZGF0b3JzLmRlYm91bmNlVGltZSh2YWxpZGF0b3JGbiwgeyAuLi5vcHRzLCBkZWJvdW5jZVRpbWUsIGRpc3Bvc2U6ICRkaXNwb3NlIH0pO1xuICAgIGZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yRm4pO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLy8gV2hlbiB1bnN1YnNjcmliaW5nLCByZW1vdmUgYXN5bmMgdmFsaWRhdG9yXG4gICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICAvLyBDbGVhciBhZGRlZCB2YWxpZGF0b3IuIE11c3QgYmUgZG9uZSBOT1cgKHdpdGhvdXQgZGVsYXkpIGJlY2F1c2UgZ2VuZXJhbGx5IGEgbmV3IEpvYiBpcyBnaXZlbiBqdXN0IGFmdGVyXG4gICAgICBmb3JtLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XG5cbiAgICAgIC8vIFN0b3AgdGhlIGpvYiwgd2l0aCBhIGRlbGF5IHRvIGxldCB0aGUgbGFzdCBleGVjdXRpb24gZmluaXNoZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAkZGlzcG9zZS5uZXh0KCk7XG4gICAgICAgICRkaXNwb3NlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBkZWJvdW5jZVRpbWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxufVxuIl19
623
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEdBT2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBc0IsTUFBTSxRQUFRLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsb0JBQW9CLEdBQUc7UUFDcEMsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCO1FBQ3ZDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUI7UUFDN0MsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQjtLQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFtQjtRQUNoRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksQ0FB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WSxFQUFFLENBQUM7WUFDckQsOENBQThDO1lBQzlDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FDekIsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsc0JBQXNCLENBQzNCLElBQXFCLEVBQ3JCLFdBQTJDLEVBQzNDLElBSUM7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsTUFBTSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUVuRyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRXJDLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2SCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLDZDQUE2QztRQUM3QyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNwQiwwR0FBMEc7WUFDMUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsZ0VBQWdFO1lBQ2hFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCwgdW5pdE9mVGltZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQVUJLRVlfUkVHRVhQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNOb3ROaWxPck5hTiwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHsgZGVsYXksIGZyb20sIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpcnN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZFZhbGlkYXRvcnMge1xuICBwcml2YXRlIHN0YXRpYyBfRE9VQkxFX1JFR0VYUF9DQUNIRSA9IHtcbiAgICBOT19MSU1JVDogL14tP1xcZCsoWy4sXVxcZCopPyQvLFxuICAgIDE6IC9eLT9cXGQrKFsuLF1cXGQpPyQvLCAvLyAxIGRlY2ltYWwgbWF4XG4gICAgMjogL14tP1xcZCsoWy4sXVxcZHsxLDJ9KT8kLywgLy8gMiBkZWNpbWFscyBtYXhcbiAgICAzOiAvXi0/XFxkKyhbLixdXFxkezEsM30pPyQvLCAvLyAzIGRlY2ltYWxzIG1heFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGdldERvdWJsZVJlZ2V4cChtYXhEZWNpbWFsczogbnVtYmVyKTogUmVnRXhwIHtcbiAgICBpZiAoaXNOaWwobWF4RGVjaW1hbHMpKSByZXR1cm4gdGhpcy5fRE9VQkxFX1JFR0VYUF9DQUNIRS5OT19MSU1JVDtcblxuICAgIGlmIChtYXhEZWNpbWFscyA8IDApIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYXhEZWNpbWFscyB2YWx1ZTogJHttYXhEZWNpbWFsc31gKTtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXTtcbiAgICBpZiAocmVnZXhwKSByZXR1cm4gcmVnZXhwO1xuXG4gICAgLy8gTmV3OiBhZGQgdG8gY2FjaGVcbiAgICB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXSA9IG5ldyBSZWdFeHAoYF4tP1xcXFxkKyhbLixdXFxcXGR7MSwke21heERlY2ltYWxzfX0pPyRgKTtcbiAgICByZXR1cm4gdGhpcy5fRE9VQkxFX1JFR0VYUF9DQUNIRVttYXhEZWNpbWFsc107XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG90aGVyQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG90aGVyQ29udHJvbCA9IGMucGFyZW50Py5nZXQob3RoZXJDb250cm9sTmFtZSk7XG4gICAgICBpZiAob3RoZXJDb250cm9sICYmIGMudmFsdWUgIT09IG90aGVyQ29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVxdWFsczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgSTE4Tl9FUlJPUl9LRVlTID0ge1xuICAgIHJlcXVpcmVkOiAnRVJST1IuRklFTERfUkVRVUlSRUQnLFxuICAgIG1pbjogJ0VSUk9SLkZJRUxEX01JTicsXG4gICAgbWF4OiAnRVJST1IuRklFTERfTUFYJyxcbiAgICBtaW5sZW5ndGg6ICdFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyxcbiAgICBtYXhsZW5ndGg6ICdFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyxcbiAgICBwdWJrZXk6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZJyxcbiAgICB2YWxpZERhdGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURScsXG4gICAgZGF0ZUlzQWZ0ZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicsXG4gICAgZGF0ZUlzQmVmb3JlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyxcbiAgICBkYXRlUmFuZ2U6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRScsXG4gICAgZGF0ZU1pbkR1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OJyxcbiAgICBkYXRlTWF4RHVyYXRpb246ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NQVhfRFVSQVRJT04nLFxuICAgIG1heERlY2ltYWxzOiAnRVJST1IuRklFTERfTUFYSU1VTV9ERUNJTUFMUycsXG4gICAgZGVjaW1hbDogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9ERUNJTUFMJyxcbiAgICBpbnRlZ2VyOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0lOVEVHRVInLFxuICAgIHByZWNpc2lvbjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QUkVDSVNJT04nLFxuICAgIGVtYWlsOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyxcbiAgICBsYXRpdHVkZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9MQVRJVFVERScsXG4gICAgbG9uZ2l0dWRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0xPTkdJVFVERScsXG4gICAgcGF0dGVybjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QQVRURVJOJyxcbiAgICB1bmlxdWU6ICdFUlJPUi5GSUVMRF9OT1RfVU5JUVVFJyxcbiAgICBlbnRpdHk6ICdFUlJPUi5GSUVMRF9JTlZBTElEJyxcbiAgICBpbnZhbGlkOiAnRVJST1IuRklFTERfSU5WQUxJRCcsXG4gICAgaW5jb25zaXN0ZW50OiAnRVJST1IuRklFTERfSU5DT05TSVNURU5UJyxcbiAgICBlcXVhbHM6ICdFUlJPUi5GSUVMRF9OT1RfRVFVQUxTJyxcbiAgfTtcblxuICBzdGF0aWMgbGF0aXR1ZGUoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmICh2YWx1ZSA8IC05MCB8fCB2YWx1ZSA+IDkwKSkge1xuICAgICAgcmV0dXJuIHsgbGF0aXR1ZGU6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgbG9uZ2l0dWRlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiAodmFsdWUgPCAtMTgwIHx8IHZhbHVlID4gMTgwKSkge1xuICAgICAgcmV0dXJuIHsgbG9uZ2l0dWRlOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIG9iamVjdChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4geyBvYmplY3Q6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW50aXR5KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGlzTmlsKHZhbHVlLmlkKSkpIHtcbiAgICAgIHJldHVybiB7IGVudGl0eTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbnRpdGllcyhjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmV2ZXJ5KChlKSA9PiBpc05pbChlPy5pZCkpKSkge1xuICAgICAgcmV0dXJuIHsgZW50aXR5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGVtcHR5KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBlbXB0eTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBwdWJrZXkoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIVBVQktFWV9SRUdFWFAudGVzdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4geyBwdWJrZXk6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgaW50ZWdlcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmIChpc05hTih2YWx1ZSkgfHwgKHZhbHVlIHwgMCkgIT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4geyBpbnRlZ2VyOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRlY2ltYWwob3B0cz86IHsgbWF4RGVjaW1hbHM/OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLmdldERvdWJsZVJlZ2V4cChvcHRzPy5tYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBHZXR0aW5nIGEgTmFOIHZhbHVlIChkZWNpbWFsIHdhcyBleHBlY3RlZCkgIVwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIHZhbHVlICE9PSAnJyAmJiAhcmVnZXhwLnRlc3QodmFsdWUgYXMgc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gaXNOb3ROaWwob3B0cz8ubWF4RGVjaW1hbHMpID8geyBtYXhEZWNpbWFsczogeyBtYXhEZWNpbWFsczogb3B0cy5tYXhEZWNpbWFscyB9IH0gOiB7IGRlY2ltYWw6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgcHJlY2lzaW9uLiBlLmcuIGlmIHByZWNpc2lvbj0wLjUgdGhlbiB2YWx1ZT0wLjYgaXMgaW52YWxpZCwgYnV0IDEuNSBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uXG4gICAqL1xuICBzdGF0aWMgcHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmIChpc05pbChwcmVjaXNpb24pKSB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIGEgbm90IG5pbCBwcmVjaXNpb24nKTtcblxuICAgIC8vIFdBUk46IHdlIHNob3VsZCBkZWZpbmUgYSBtdWx0aXBsaWVyLCBiZWNhdXNlIG1vZHVsbyBpbiBqYXZhc2NyaXB0IHdpbGwgb25seSB3b3JrIG9uIGludGVnZXJcbiAgICAvLyAoZS5nLiBcIjcgJSAwLjFcIiBpbiBqYXZhc2NyaXB0IHdpbGwgTk9UIHJldHVybiB6ZXJvIChidXQgMC4wOTk5OTk5OTk5OTk5OTk2MilcbiAgICBjb25zdCBwcmVjaXNpb25OYkRlY2ltYWxzID0gKHByZWNpc2lvbi50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aDtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbk5iRGVjaW1hbHMpO1xuICAgIGNvbnN0IG11bHRpcGxpZWRQcmVjaXNpb24gPSBNYXRoLnJvdW5kKG11bHRpcGxpZXIgKiBwcmVjaXNpb24pO1xuXG4gICAgLy8gVGhlIHZhbGlkYXRvciBmdW5jdGlvblxuICAgIHJldHVybiAoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkgfHwgTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFdBUk46IENvbnZlcnQgdmFsdWUgaW50byBpbnRlZ2VyLCBiZWZvcmUgYXBwbHlpbmcgbW9kdWxvIG9wZXJhdG9yXG4gICAgICBjb25zdCBtb2QgPSBNYXRoLnJvdW5kKCt2YWx1ZSAqIG11bHRpcGxpZXIpICUgbXVsdGlwbGllZFByZWNpc2lvbjtcbiAgICAgIGlmIChtb2QgIT09IDApIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKGBXQVJOIEdldHRpbmcgYSAke3ZhbHVlfSB3aXRoIGFuIGludmFsaWQgcHJlY2lzaW9uIChleHBlY3RlZCBwcmVjaXNpb24gaXM6ICR7cHJlY2lzaW9ufSlgKTtcbiAgICAgICAgcmV0dXJuIHsgcHJlY2lzaW9uOiB7IHByZWNpc2lvbiB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkRGF0ZVRpbWUocmVxdWlyZWRUaW1lID0gdHJ1ZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGNvbnN0IGRhdGUgPSAhdmFsdWUgfHwgaXNNb21lbnQodmFsdWUpID8gdmFsdWUgOiBmcm9tRGF0ZUlTT1N0cmluZyh2YWx1ZSk7XG4gICAgICBpZiAoZGF0ZSAmJiAoIWRhdGUuaXNWYWxpZCgpIHx8IGRhdGUueWVhcigpIDwgMTkwMCB8fCAocmVxdWlyZWRUaW1lICYmIERhdGVVdGlscy5pc05vVGltZShkYXRlKSkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkRGF0ZTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZERhdGUgPSBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZVRpbWUodHJ1ZSk7XG4gIHN0YXRpYyB2YWxpZERhdGVBbGxvd05vVGltZSA9IFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlVGltZShmYWxzZSk7XG5cbiAgc3RhdGljIGRhdGVJc0FmdGVyKHByZXZpb3VzVmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKHByZXZpb3VzVmFsdWUpICYmIHZhbHVlLmlzU2FtZU9yQmVmb3JlKHByZXZpb3VzVmFsdWUsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yXG4gICAgICAgIHJldHVybiB7IGRhdGVJc0FmdGVyOiB7IG1pbkRhdGU6IGVycm9yUGFyYW0gfSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlSXNCZWZvcmUobWF4VmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKG1heFZhbHVlKSAmJiB2YWx1ZS5pc1NhbWVPckFmdGVyKG1heFZhbHVlLCBncmFudWxhcml0eSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4geyBkYXRlSXNCZWZvcmU6IHsgbWF4RGF0ZTogZXJyb3JQYXJhbSB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZUVuZChzdGFydERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgZXJyb3IgPSBtc2cgPyB7IG1zZyB9IDogeyBkYXRlUmFuZ2U6IHRydWUgfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIEZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0OiBza2lwXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3Qgc3RhcnRDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHN0YXJ0RGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGJyb3RoZXIgY29udHJvbCAnJHtzdGFydERhdGVGaWVsZE5hbWV9JyBpbiB0aGUgcGFyZW50IGZvcm1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzdGFydENvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKGVuZERhdGUpICYmIGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgZW5kRGF0ZS5pc1NhbWVPckJlZm9yZShzdGFydERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlUmFuZ2VTdGFydChlbmREYXRlRmllbGROYW1lOiBzdHJpbmcsIG1zZz86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBtc2cgPyAnbXNnJyA6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IGVycm9yID0gbXNnID8geyBtc2cgfSA6IHsgZGF0ZVJhbmdlOiB0cnVlIH07XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAvLyBGb3JtIGdyb3VwIG5vdCBjcmVhdGVkIHlldDogc2tpcFxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGVuZERhdGVDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGVuZERhdGVGaWVsZE5hbWUpO1xuICAgICAgaWYgKCFlbmREYXRlQ29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGNvbnRyb2wgJyR7ZW5kRGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmREYXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIC8vIEVycm9yIGlmIHZhbHVlIDw9IGJlZm9yZURhdGVcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIHN0YXJ0RGF0ZS5pc1NhbWVPckFmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5UGFyZW50RXJyb3JzKGVycm9yTmFtZXM/OiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIFNraXAgaWYgY29udHJvbCBhbHJlYWR5IGhhcyBzb21lIGVycm9yc1xuICAgICAgaWYgKGNvbnRyb2wuZXJyb3JzKSByZXR1cm4gbnVsbDtcbiAgICAgIC8vIFNraXAgaWYgcGFyZW50IGZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gRm9ybSBncm91cCBub3QgY3JlYXRlZCB5ZXRcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLnBhcmVudC5lcnJvcnM7XG5cbiAgICAgIC8vIE5vIGVycm9ycywgb3IgY29weSBhbGwgZXJyb3JzXG4gICAgICBpZiAoIWVycm9ycyB8fCBpc0VtcHR5QXJyYXkoZXJyb3JOYW1lcykpIHJldHVybiBlcnJvcnM7XG5cbiAgICAgIC8vIENvcHkgb25seSBleHBlY3RlZCBlcnJvcnNcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGVycm9yTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHJlc1trZXldID0gZXJyb3JzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNsZWFyRXJyb3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvckNvZGU6IHN0cmluZykge1xuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSkpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnNbZXJyb3JDb2RlXSkge1xuICAgICAgICAvLyBPbmx5IG9uZSBlcnJvcjogcmVzZXQgZXJyb3JzXG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcnMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIGVycm9ycyBleGlzdHM6IGp1c3QgcmVtb3ZlIHRoaXMgZXJyb3JcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGVycm9yc1tlcnJvckNvZGVdO1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRGb3JtR3JvdXBWYWxpZGF0b3JzIHtcbiAgc3RhdGljIGRhdGVSYW5nZShcbiAgICBzdGFydERhdGVGaWVsZDogc3RyaW5nLFxuICAgIGVuZERhdGVGaWVsZDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IG1zZz86IHN0cmluZzsgZmllbGRPbmx5PzogYm9vbGVhbjsgc2tpcElmTm9UaW1lPzogYm9vbGVhbiB9IHwgc3RyaW5nXG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBtc2cgPSB0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycgPyBvcHRzIDogb3B0cz8ubXNnO1xuICAgIGNvbnN0IGZpZWxkT25seSA9IHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyA/IG9wdHM/LmZpZWxkT25seSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBza2lwSWZOb1RpbWUgPSB0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgPyBvcHRzPy5za2lwSWZOb1RpbWUgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBpc05vdE5pbE9yQmxhbmsobXNnKSA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgcmFuZ2VFcnJvciA9IG1zZyA/IHsgbXNnIH0gOiB7IGRhdGVSYW5nZTogdHJ1ZSB9O1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuXG4gICAgICBjb25zdCBoYXNTdGFydERhdGUgPSBpc05vdE5pbChzdGFydERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShzdGFydERhdGUpKTtcbiAgICAgIGNvbnN0IGhhc0VuZERhdGUgPSBpc05vdE5pbChlbmREYXRlKSAmJiAoIXNraXBJZk5vVGltZSB8fCBEYXRlVXRpbHMuaXNOb1RpbWUoZW5kRGF0ZSkpO1xuICAgICAgaWYgKGhhc1N0YXJ0RGF0ZSAmJiBoYXNFbmREYXRlICYmIHN0YXJ0RGF0ZS5pc0FmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5yYW5nZUVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIHBhcmVudCBmb3JtLCBieSBkZWZhdWx0KVxuICAgICAgICByZXR1cm4gZmllbGRPbmx5ID8gbnVsbCA6IHJhbmdlRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVNYXhEdXJhdGlvbihcbiAgICBzdGFydERhdGVGaWVsZDogc3RyaW5nLFxuICAgIGVuZERhdGVGaWVsZDogc3RyaW5nLFxuICAgIG1heER1cmF0aW9uOiBudW1iZXIsXG4gICAgZHVyYXRpb25Vbml0PzogbW9tZW50LnVuaXRPZlRpbWUuRGlmZixcbiAgICBvcHRzPzogeyBza2lwSWZOb1RpbWU/OiBib29sZWFuIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IG1heER1cmF0aW9uRXJyb3IgPSB7IGRhdGVNYXhEdXJhdGlvbjogdHJ1ZSB9O1xuICAgIGNvbnN0IHNraXBJZk5vVGltZSA9IG9wdHM/LnNraXBJZk5vVGltZTtcblxuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuXG4gICAgICBjb25zdCBoYXNTdGFydERhdGUgPSBpc05vdE5pbChzdGFydERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShzdGFydERhdGUpKTtcbiAgICAgIGNvbnN0IGhhc0VuZERhdGUgPSBpc05vdE5pbChlbmREYXRlKSAmJiAoIXNraXBJZk5vVGltZSB8fCBEYXRlVXRpbHMuaXNOb1RpbWUoZW5kRGF0ZSkpO1xuXG4gICAgICBpZiAoaGFzU3RhcnREYXRlICYmIGhhc0VuZERhdGUgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPiBtYXhEdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5tYXhEdXJhdGlvbkVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIG1heER1cmF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWF4RHVyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1pbkR1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtaW5EdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPCBtaW5EdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGNvbnN0IGVuZEZpZWxkRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZW5kRmllbGQuZXJyb3JzIHx8IHt9O1xuICAgICAgICBlbmRGaWVsZEVycm9yc1snZGF0ZU1pbkR1cmF0aW9uJ10gPSB0cnVlO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoZW5kRmllbGRFcnJvcnMpO1xuICAgICAgICBlbmRGaWVsZC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiB7IGRhdGVNaW5EdXJhdGlvbjogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gdGhlIGVuZCBmaWVsZFxuICAgICAgZWxzZSB7XG4gICAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgJ2RhdGVNaW5EdXJhdGlvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgICAgcHJlZGljYXRlPzogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gYm9vbGVhbjtcbiAgICB9XG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBpc0VtcHR5ID0gb3B0cz8uaXNFbXB0eSB8fCAoKGNvbnRyb2wpID0+IGlzTmlsT3JCbGFuayhjb250cm9sPy52YWx1ZSkpO1xuICAgIGNvbnN0IHByZWRpY2F0ZSA9IG9wdHM/LnByZWRpY2F0ZSB8fCAoKGNvbnRyb2wpID0+IGlzTm90TmlsT3JCbGFuayhjb250cm9sPy52YWx1ZSkpO1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoIWNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgY29udHJvbCAnJHtmaWVsZE5hbWV9JyB1c2VkIGJ5IFNoYXJlRm9ybUdyb3VwVmFsaWRhdG9ycy5yZXF1aXJlZElmIHZhbGlkYXRvciFgKTtcbiAgICAgIGNvbnN0IGFub3RoZXJDb250cm9sID0gYW5vdGhlckZpZWxkVG9DaGVjayBpbnN0YW5jZW9mIEFic3RyYWN0Q29udHJvbCA/IGFub3RoZXJGaWVsZFRvQ2hlY2sgOiBncm91cC5nZXQoYW5vdGhlckZpZWxkVG9DaGVjayk7XG4gICAgICBpZiAoIWFub3RoZXJDb250cm9sKSB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGNvbnRyb2wgJHt0eXBlb2YgYW5vdGhlckZpZWxkVG9DaGVjayA9PT0gJ3N0cmluZycgPyBhbm90aGVyRmllbGRUb0NoZWNrICArICcgJyA6ICcnfXVzZWQgYnkgU2hhcmVGb3JtR3JvdXBWYWxpZGF0b3JzLnJlcXVpcmVkSWYgdmFsaWRhdG9yIWApO1xuICAgICAgaWYgKGlzRW1wdHkoY29udHJvbCkgJiYgcHJlZGljYXRlKGFub3RoZXJDb250cm9sKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIG9wdHM/LmZpZWxkT25seSA/IG51bGwgOiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZlRydWUoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sLFxuICAgIG9wdHM/OiB7XG4gICAgICBmaWVsZE9ubHk/OiBib29sZWFuO1xuICAgICAgaXNFbXB0eT86IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW47XG4gICAgfVxuICApOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgaXNFbXB0eSA9IG9wdHM/LmlzRW1wdHkgfHwgKChjb250cm9sKSA9PiBpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkpO1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBhbm90aGVyQ29udHJvbCA9IGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wgPyBhbm90aGVyRmllbGRUb0NoZWNrIDogZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spO1xuICAgICAgaWYgKCFhbm90aGVyQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBmaWVsZCB0byBjaGVjayEnKTtcbiAgICAgIGlmIChpc0VtcHR5KGNvbnRyb2wpICYmIHRvQm9vbGVhbihhbm90aGVyQ29udHJvbC52YWx1ZSwgZmFsc2UpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcik7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICByZXR1cm4gb3B0cz8uZmllbGRPbmx5ID8gbnVsbCA6IGVycm9yO1xuICAgICAgfVxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmRW1wdHkoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nLFxuICAgIG9wdHM/OiB7XG4gICAgICBmaWVsZE9ubHk/OiBib29sZWFuO1xuICAgICAgaXNFbXB0eT86IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW47XG4gICAgfVxuICApOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgaXNFbXB0eSA9IG9wdHM/LmlzRW1wdHkgfHwgKChjb250cm9sKSA9PiBpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkpO1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoaXNFbXB0eShjb250cm9sKSAmJiBpc05pbE9yQmxhbmsoZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spLnZhbHVlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIG9wdHM/LmZpZWxkT25seSA/IG51bGwgOiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcHJvcGFnYXRlSWZEaXJ0eShmaWVsZE5hbWU6IHN0cmluZywgZmllbGROYW1lVG9Qcm9wYWdhdGU6IHN0cmluZywgdmFsdWVUb1Byb3BhZ2F0ZTogYW55KTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xUb1Byb3BhZ2F0ZSA9IGdyb3VwLmdldChmaWVsZE5hbWVUb1Byb3BhZ2F0ZSk7XG4gICAgICBpZiAoY29udHJvbC5kaXJ0eSAmJiBjb250cm9sVG9Qcm9wYWdhdGUudmFsdWUgIT09IHZhbHVlVG9Qcm9wYWdhdGUpIHtcbiAgICAgICAgY29udHJvbFRvUHJvcGFnYXRlLnNldFZhbHVlKHZhbHVlVG9Qcm9wYWdhdGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGFzIGNvbXBvc2UsIGJ1dCBrZWVwIG9ubHkgdGhlIGZpcnN0IGVycm9ycyAoaW5zdGVhZCBvZiB0aGUgdW5pb24pXG4gICAqXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JzXG4gICAqL1xuICBmaXJzdCh2YWxpZGF0b3JzOiAoVmFsaWRhdG9yRm4gfCBudWxsIHwgdW5kZWZpbmVkKVtdKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiAoY29udHJvbCkgPT5cbiAgICAgIHZhbGlkYXRvcnNcbiAgICAgICAgLmZpbHRlcihpc05vdE5pbClcbiAgICAgICAgLm1hcCgodmFsaWRhdG9yKSA9PiB2YWxpZGF0b3IoY29udHJvbCkpXG4gICAgICAgIC5maW5kKGlzTm90TmlsKSB8fCBudWxsO1xuICB9XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycyB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB1bmlxdWVuZXNzIG9mIGFuIGVudGl0eSBpbiBhIEZvcm1BcnJheVxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgaW4gRm9ybUFycmF5XG4gICAqL1xuICBzdGF0aWMgdW5pcXVlRW50aXR5KGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChhcnJheTogVW50eXBlZEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSA9IFtdO1xuICAgICAgaWYgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgICAvLyBnYXRoZXIgY29udHJvbHMgaW4gYXJyYXkgd2l0aCB2YWxpZCBlbnRpdHlcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIGFycmF5LmNvbnRyb2xzKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUdyb3VwID0gY29udHJvbCBhcyBVbnR5cGVkRm9ybUdyb3VwO1xuICAgICAgICAgIGlmIChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoISF2YWx1ZSAmJiAhIXZhbHVlLmlkKSBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgb2NjdXJyZW5jZXMgb2YgZW50aXR5IGJ5IGlkXG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VzID0gY29udHJvbHMucmVkdWNlKChhY2MsIGNvbnRyb2wpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGNvbnRyb2wudmFsdWUuaWQ7XG4gICAgICAgICAgaWYgKGFjY1tpZF0pIGFjY1tpZF0rKztcbiAgICAgICAgICBlbHNlIGFjY1tpZF0gPSAxO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgLy8gZ2V0IGNvbnRyb2xzIHdpdGggdmFsdWUgb2NjdXJyZW5jZXMgPiAxXG4gICAgICAgIGNvbnN0IGVycm9yID0geyB1bmlxdWVFbnRpdHk6IHRydWUgfTtcbiAgICAgICAgbGV0IHJldHVybkVycm9yID0gZmFsc2U7XG4gICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgLmZpbHRlcigoY29udHJvbCkgPT4gb2NjdXJyZW5jZXNbY29udHJvbC52YWx1ZS5pZF0gPiAxKVxuICAgICAgICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gY29udHJvbC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4uZXJyb3IgfTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJldHVybkVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJldHVybkVycm9yKSByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3VuaXF1ZUVudGl0eScpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRBcnJheU1pbkxlbmd0aChtaW5MZW5ndGg/OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgbWluTGVuZ3RoID0gbWluTGVuZ3RoIHx8IDE7XG4gICAgcmV0dXJuIChhcnJheTogVW50eXBlZEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmICghYXJyYXkgfHwgYXJyYXkubGVuZ3RoIDwgbWluTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGFycmF5TWF4TGVuZ3RoKG1heExlbmd0aD86IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICBtYXhMZW5ndGggPSBtYXhMZW5ndGggfHwgMTtcbiAgICByZXR1cm4gKGFycmF5OiBVbnR5cGVkRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKGFycmF5ICYmIGFycmF5Lmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICByZXR1cm4geyBtYXhMZW5ndGg6IG1heExlbmd0aCB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3VtIG9mIGNvbnRyb2wgdmFsdWVzIGluIGFuIEZvcm1BcnJheSBub3Qgb3ZlcmZsb3cgdGhlIG1heCB2YWx1ZVxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgaW4gRm9ybUFycmF5XG4gICAqIEBwYXJhbSBtYXggdGhlIG1heGltdW0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB2YWxpZFN1bU1heFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIG1heDogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIGFycmF5LmNvbnRyb2xzKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUdyb3VwID0gY29udHJvbCBhcyBVbnR5cGVkRm9ybUdyb3VwO1xuICAgICAgICAgIGlmIChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdICYmIGlzTm90TmlsT3JOYU4oZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLnB1c2goZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9scy5yZWR1Y2UoKHN1bSwgY29udHJvbCkgPT4gc3VtICsgY29udHJvbC52YWx1ZSwgMCkgPiBtYXgpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHsgc3VtTWF4VmFsdWU6IHRydWUgfTtcbiAgICAgICAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gY29udHJvbC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBlcnJvcnMgPSB7IC4uLmVycm9ycywgLi4uZXJyb3IgfTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAnc3VtTWF4VmFsdWUnKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIE9ic2VydmFibGVWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xuZXhwb3J0IHR5cGUgUHJvbWlzZVZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD47XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkQXN5bmNWYWxpZGF0b3JzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgREVCT1VOQ0VfVElNRV9WQUxJREFUT1JfSUQgPSAwO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBkZWJvdW5jZSB0aW1lIHRvIGEgdmFsaWRhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybVxuICAgKiBAcGFyYW0gdmFsaWRhdG9yRm5cbiAgICogQHBhcmFtIG9wdHMgVXNlIG9wdHMuc3RvcFN1YmplY3QgdG8gc3RvcCB0aGUgdmFsaWRhdG9yLCBiZWZvcmUgZW5kXG4gICAqL1xuICBzdGF0aWMgZGVib3VuY2VUaW1lKFxuICAgIHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm4sXG4gICAgb3B0cz86IHtcbiAgICAgIGRpc3Bvc2U/OiBPYnNlcnZhYmxlPGFueT47XG4gICAgICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gICAgICBtYXJrRm9yQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZVZhbGlkYXRvckZuIHtcbiAgICAvLyBERUJVRyBvbmx5XG4gICAgY29uc3QgZGVidWcgPSBvcHRzPy5kZWJ1ZyB8fCBmYWxzZTtcbiAgICBjb25zdCBsb2dQcmVmaXggPSBkZWJ1ZyAmJiBgW2RlYm91bmNlVGltZS12YWxpZGF0b3JdICMke1NoYXJlZEFzeW5jVmFsaWRhdG9ycy5ERUJPVU5DRV9USU1FX1ZBTElEQVRPUl9JRCsrfSAtIGA7XG4gICAgY29uc3QgZGVib3VuY2VUaW1lID0gdG9OdW1iZXIob3B0cz8uZGVib3VuY2VUaW1lLCAyNTApO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgYE5ldyB2YWxpZGF0b3Igd2l0aCBhIGRlYm91bmNlVGltZSBhdCAke2RlYm91bmNlVGltZX1tc2ApO1xuXG4gICAgY29uc3QgJGRpc3Bvc2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICBjb25zdCBkaXNwb3NlRXZlbnQkID0gb3B0cz8uZGlzcG9zZSA/IG1lcmdlKCRkaXNwb3NlU3ViamVjdCwgb3B0cz8uZGlzcG9zZSkgOiAkZGlzcG9zZVN1YmplY3Q7XG5cbiAgICAvLyBERUJVR1xuICAgIGlmIChkZWJ1ZyAmJiBvcHRzPy5kaXNwb3NlKSB7XG4gICAgICBvcHRzPy5kaXNwb3NlLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnU3RvcHBpbmcnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xuICAgICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArICdGb3JtIGFzayB2YWxpZGF0aW9uLi4uJyk7XG5cbiAgICAgIC8vIFN0b3AgcHJldmlvdXMgb2JzZXJ2YWJsZXNcbiAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICBsZXQgbm93OiBudW1iZXI7XG5cbiAgICAgIHJldHVybiBvZihudWxsKS5waXBlKFxuICAgICAgICAvLyBBZGQgYSBkZWxheSBiZWZvcmUgZXhlY3V0aW9uXG4gICAgICAgIGRlbGF5KGRlYm91bmNlVGltZSksXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIHRhcCgoXykgPT4ge1xuICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRXhlY3V0aW5nLi4uJyk7XG4gICAgICAgICAgICBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoXykgPT4ge1xuICAgICAgICAgIC8vIENhbGwgdGhlIHZhbGlkYXRvclxuICAgICAgICAgIGNvbnN0IHJlcyA9IHZhbGlkYXRvckZuKGNvbnRyb2wpO1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byByZXR1cm4gYW4gT2JzZXJ2YWJsZVxuICAgICAgICAgIGlmIChpc09ic2VydmFibGUocmVzKSkgcmV0dXJuIHJlcztcbiAgICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgcmV0dXJuIGZyb20ocmVzKTtcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgfSksXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIHRhcCgocmVzKSA9PiBkZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBGaW5pc2hlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXMgKCR7cmVzID8gJ3dpdGggZXJyb3JzJyA6ICdubyBlcnJvcid9KWAsIHJlcykpLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tkZWJvdW5jZVRpbWUtdmFsaWRhdG9yXSBFcnJvciB3aGlsZSBleGVjdXRpbmcgdmFsaWRhdG9yLiBTdG9wcGluZyBqb2InLCBlcnJvcik7XG4gICAgICAgICAgJGRpc3Bvc2VTdWJqZWN0Lm5leHQoKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSksXG4gICAgICAgIC8vIFJlZnJlc2ggVUksIGFmdGVyIGEgc3VjY2Vzc2Z1bCBleGVjdXRpb25cbiAgICAgICAgdGFwKCgpID0+IG9wdHM/Lm1hcmtGb3JDaGVjayAmJiBvcHRzPy5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0byBzdG9wLCBiZWNhdXNlIG9mIHRoZSBzd2l0Y2hNYXBcbiAgICAgICAgdGFrZVVudGlsKGRpc3Bvc2VFdmVudCQpXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFzeW5jIHZhbGlkYXRvciwgdGhhdCBjYW4gYmUgZGlzcG9zZWQgYnkgdGhlIHJldHVybmVkIHN1YnNjcmlwdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZm9ybVxuICAgKiBAcGFyYW0gdmFsaWRhdG9yRm4gdGhlIHZhbGlkYXRvciBvciBqb2IgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQXN5bmNWYWxpZGF0b3IoXG4gICAgZm9ybTogQWJzdHJhY3RDb250cm9sLFxuICAgIHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm4sXG4gICAgb3B0cz86IHtcbiAgICAgIGRlYm91bmNlVGltZT86IG51bWJlcjtcbiAgICAgIG1hcmtGb3JDaGVjaz86ICgpID0+IHZvaWQ7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfVxuICApOiBTdWJzY3JpcHRpb24ge1xuICAgIGlmIChmb3JtLmFzeW5jVmFsaWRhdG9yKSB0aHJvdyBFcnJvcignRm9ybSBhbHJlYWR5IGhhdmUgYW4gYXN5bmMgdmFsaWRhdG9yLiBDYW5ub3QgY29uZmlndXJlIGpvYicpO1xuXG4gICAgY29uc3QgZGVib3VuY2VUaW1lID0gdG9OdW1iZXIob3B0cz8uZGVib3VuY2VUaW1lLCAyNTApO1xuICAgIGNvbnN0ICRkaXNwb3NlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yRm4gPSBTaGFyZWRBc3luY1ZhbGlkYXRvcnMuZGVib3VuY2VUaW1lKHZhbGlkYXRvckZuLCB7IC4uLm9wdHMsIGRlYm91bmNlVGltZSwgZGlzcG9zZTogJGRpc3Bvc2UgfSk7XG4gICAgZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JGbik7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvLyBXaGVuIHVuc3Vic2NyaWJpbmcsIHJlbW92ZSBhc3luYyB2YWxpZGF0b3JcbiAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHtcbiAgICAgIC8vIENsZWFyIGFkZGVkIHZhbGlkYXRvci4gTXVzdCBiZSBkb25lIE5PVyAod2l0aG91dCBkZWxheSkgYmVjYXVzZSBnZW5lcmFsbHkgYSBuZXcgSm9iIGlzIGdpdmVuIGp1c3QgYWZ0ZXJcbiAgICAgIGZvcm0uY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcblxuICAgICAgLy8gU3RvcCB0aGUgam9iLCB3aXRoIGEgZGVsYXkgdG8gbGV0IHRoZSBsYXN0IGV4ZWN1dGlvbiBmaW5pc2hlZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICRkaXNwb3NlLm5leHQoKTtcbiAgICAgICAgJGRpc3Bvc2UudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGRlYm91bmNlVGltZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG59XG4iXX0=
@@ -3168,11 +3168,8 @@ class SharedFormGroupValidators {
3168
3168
  const predicate = opts?.predicate || ((control) => isNotNilOrBlank(control?.value));
3169
3169
  return (group) => {
3170
3170
  const control = group.get(fieldName);
3171
- // Workaround - When control is missing (can occur when form has been upgrade, but the validator is still on the form group)
3172
- if (!control) {
3173
- console.warn(`Unable to find control '${fieldName}' used by ShareFormGroupValidators.requiredIf validator!`);
3174
- return null;
3175
- }
3171
+ if (!control)
3172
+ throw new Error(`Unable to find control '${fieldName}' used by ShareFormGroupValidators.requiredIf validator!`);
3176
3173
  const anotherControl = anotherFieldToCheck instanceof AbstractControl ? anotherFieldToCheck : group.get(anotherFieldToCheck);
3177
3174
  if (!anotherControl)
3178
3175
  throw new Error(`Unable to find control ${typeof anotherFieldToCheck === 'string' ? anotherFieldToCheck + ' ' : ''}used by ShareFormGroupValidators.requiredIf validator!`);
@@ -28633,7 +28630,15 @@ class GeolocationUtils {
28633
28630
  static isNilOrInvalid(position, opts) {
28634
28631
  return !GeolocationUtils.isNotNilAndValid(position, opts);
28635
28632
  }
28633
+ /**
28634
+ * @deprecated Use computeDistanceInNauticalMiles instead
28635
+ * @param position1
28636
+ * @param position2
28637
+ */
28636
28638
  static computeDistanceInMiles(position1, position2) {
28639
+ return GeolocationUtils.computeDistanceInNauticalMiles(position1, position2);
28640
+ }
28641
+ static computeDistanceInNauticalMiles(position1, position2) {
28637
28642
  // Invalid position(s): skip
28638
28643
  if (GeolocationUtils.isNilOrInvalid(position1, { debug: true }) || GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
28639
28644
  return;