taxtank-core 0.30.127 → 0.30.129

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.
@@ -132,8 +132,26 @@ export class BankAccountCollection extends Collection {
132
132
  getPropertyBalanceAmount(propertyId) {
133
133
  return this.items.reduce((sum, bankAccount) => sum + bankAccount.getPropertyBalanceAmount(propertyId), 0);
134
134
  }
135
- getMonthlyRepaymentAmount(propertyId) {
136
- return this.getLoanAccounts().reduce((sum, bankAccount) => sum + bankAccount.loan.monthlyRepaymentAmount * bankAccount.getPropertyPercentage(propertyId), 0);
135
+ get propertiesBalanceAmount() {
136
+ let balanceAmount = 0;
137
+ this.items.forEach((bankAccount) => {
138
+ bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {
139
+ balanceAmount += Math.abs(bankAccount.getPropertyBalanceAmount(bankAccountProperty.property.id));
140
+ });
141
+ });
142
+ return balanceAmount;
143
+ }
144
+ get propertiesMonthlyRepaymentAmount() {
145
+ let repaymentAmount = 0;
146
+ this.getLoanAccounts().items.forEach((bankAccount) => {
147
+ bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {
148
+ repaymentAmount += bankAccount.getMonthlyRepaymentAmount(bankAccountProperty.property.id);
149
+ });
150
+ });
151
+ return repaymentAmount;
152
+ }
153
+ getPropertyMonthlyRepaymentAmount(propertyId) {
154
+ return this.getLoanAccounts().reduce((sum, bankAccount) => sum + bankAccount.getMonthlyRepaymentAmount(propertyId), 0);
137
155
  }
138
156
  getLVR(property) {
139
157
  return this.getPropertyBalanceAmount(property.id) / property.currentYearForecast.marketValue;
@@ -142,5 +160,8 @@ export class BankAccountCollection extends Collection {
142
160
  // TODO Alex/Vik: maybe we should get it from jwtToken or think about some localStorageService?
143
161
  return this.filter((bankAccount) => bankAccount.isOwner(+localStorage.getItem('userId')));
144
162
  }
163
+ getActiveLoanAccountsByProperties(ids) {
164
+ return this.getActiveBankAccounts().getLoanAccounts().getByPropertiesIds(ids);
165
+ }
145
166
  }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1hY2NvdW50LmNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvY29sbGVjdGlvbnMvYmFuay1hY2NvdW50LmNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcxQyxPQUFPLEVBQThDLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFVBQXVCO0lBQ2hFOztPQUVHO0lBQ0gsU0FBUyxDQUFDLEtBQWtELEVBQUUsU0FBUyxHQUFHLEtBQUs7UUFDN0UsaURBQWlEO1FBQ2pELE1BQU0sVUFBVSxHQUEwQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtZQUNwRCxJQUFJLFNBQVMsRUFBRTtnQkFDYixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLE9B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QUFtQixDQUFDLFdBQVcsQ0FBQztJQUMvRixDQUFDO0lBRUQsTUFBTTtRQUNKLCtGQUErRjtRQUMvRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4vY29sbGVjdGlvbic7XG5pbXBvcnQgeyBCYW5rQWNjb3VudFR5cGVFbnVtIH0gZnJvbSAnLi4vZGIvRW51bXMnO1xuaW1wb3J0IHsgVGFua1R5cGVFbnVtIH0gZnJvbSAnLi4vZGIvRW51bXMvdGFuay10eXBlLmVudW0nO1xuaW1wb3J0IHsgQmFua0FjY291bnQsIEJhbmtBY2NvdW50UHJvcGVydHksIFByb3BlcnR5LCBUWVBFX0xPQU4gfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gvdW5pcUJ5JztcbmltcG9ydCB1bmlxIGZyb20gJ2xvZGFzaC91bmlxJztcbmltcG9ydCBjb25jYXQgZnJvbSAnbG9kYXNoL2NvbmNhdCc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uRGljdGlvbmFyeSB9IGZyb20gJy4vY29sbGVjdGlvbi1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IExvYW5Db2xsZWN0aW9uIH0gZnJvbSAnLi9sb2FuJztcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIGJhbmsgYWNjb3VudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCYW5rQWNjb3VudENvbGxlY3Rpb24gZXh0ZW5kcyBDb2xsZWN0aW9uPEJhbmtBY2NvdW50PiB7XG4gIC8qKlxuICAgKiBnZXQgbGlzdCBvZiBiYW5rIGFjY291bnRzIHdpdGggcGFzc2VkIHR5cGVzXG4gICAqL1xuICBnZXRCeVR5cGUodHlwZXM6IEJhbmtBY2NvdW50VHlwZUVudW0gfCBCYW5rQWNjb3VudFR5cGVFbnVtW10sIGlzRXhjbHVkZSA9IGZhbHNlKTogQmFua0FjY291bnRbXSB7XG4gICAgLy8gZ2V0IHR5cGVzIGFsd2F5cyBhcyBhcnJheSAoaWYgb25seSBvbmUgcGFzc2VkKVxuICAgIGNvbnN0IHR5cGVzQXJyYXk6IEJhbmtBY2NvdW50VHlwZUVudW1bXSA9IGNvbmNhdCh0eXBlcyk7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IHtcbiAgICAgIGlmIChpc0V4Y2x1ZGUpIHtcbiAgICAgICAgcmV0dXJuICF0eXBlc0FycmF5LmluY2x1ZGVzKGJhbmtBY2NvdW50LnR5cGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVzQXJyYXkuaW5jbHVkZXMoYmFua0FjY291bnQudHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGFtb3VudCBvZiBpbml0aWFsIGxvYW5zXG4gICAqL1xuICBnZXRJbml0aWFsTG9hbkFtb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEJ5VHlwZShUWVBFX0xPQU4pXG4gICAgICAucmVkdWNlKChzdW06IG51bWJlciwgYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiBzdW0gKz0gYmFua0FjY291bnQuYmFsYW5jZXMubGVuZ3RoID8gYmFua0FjY291bnQuZ2V0T3BlbmluZ0JhbGFuY2UoKSA6IDAsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBhbW91bnQgb2YgY3VycmVudCBsb2Fuc1xuICAgKi9cbiAgZ2V0Q3VycmVudExvYW5BbW91bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCeVR5cGUoVFlQRV9MT0FOKVxuICAgICAgLnJlZHVjZSgoc3VtOiBudW1iZXIsIGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCkgPT4gc3VtICs9IGJhbmtBY2NvdW50LmN1cnJlbnRCYWxhbmNlLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgY29sbGVjdGlvbiBmaWx0ZXJlZCBieSBwcm9wZXJ0eSBpZFxuICAgKi9cbiAgZ2V0QnlQcm9wZXJ0eUlkKGlkOiBudW1iZXIpOiBCYW5rQWNjb3VudENvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQmFua0FjY291bnRDb2xsZWN0aW9uKHRoaXMuaXRlbXMuZmlsdGVyKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IGJhbmtBY2NvdW50LmJhbmtBY2NvdW50UHJvcGVydGllcy5maW5kKChiYW5rQWNjb3VudFByb3BlcnR5OiBCYW5rQWNjb3VudFByb3BlcnR5KSA9PiBiYW5rQWNjb3VudFByb3BlcnR5LnByb3BlcnR5LmlkID09PSBpZCkpKTtcbiAgfVxuXG4gIGdyb3VwQnlQcm9wZXJ0eSgpOiBDb2xsZWN0aW9uRGljdGlvbmFyeTxCYW5rQWNjb3VudENvbGxlY3Rpb24+IHtcbiAgICBjb25zdCBkaWN0aW9uYXJ5ID0gbmV3IENvbGxlY3Rpb25EaWN0aW9uYXJ5KG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oKSk7XG5cbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGJhbmtBY2NvdW50KSA9PiB7XG4gICAgICBiYW5rQWNjb3VudC5iYW5rQWNjb3VudFByb3BlcnRpZXMuZm9yRWFjaCgoYmFua0FjY291bnRQcm9wZXJ0eSkgPT4ge1xuICAgICAgICBkaWN0aW9uYXJ5LmFkZFRvKGJhbmtBY2NvdW50UHJvcGVydHkucHJvcGVydHkuaWQsIGJhbmtBY2NvdW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpY3Rpb25hcnk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbGxlY3Rpb24gZmlsdGVyZWQgYnkgcHJvcGVydGllcyBpZHNcbiAgICovXG4gIGdldEJ5UHJvcGVydGllc0lkcyhpZHM6IG51bWJlcltdKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEJhbmtBY2NvdW50Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IGJhbmtBY2NvdW50LmJhbmtBY2NvdW50UHJvcGVydGllcy5maW5kKChiYW5rQWNjb3VudFByb3BlcnR5OiBCYW5rQWNjb3VudFByb3BlcnR5KSA9PiBpZHMuaW5jbHVkZXMoYmFua0FjY291bnRQcm9wZXJ0eS5wcm9wZXJ0eS5pZCkpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbGxlY3Rpb24gb2YgYWN0aXZlIGJhbmsgYWNjb3VudHNcbiAgICovXG4gIGdldEFjdGl2ZUJhbmtBY2NvdW50cygpOiBCYW5rQWNjb3VudENvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQmFua0FjY291bnRDb2xsZWN0aW9uKHRoaXMuaXRlbXMuZmlsdGVyKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IGJhbmtBY2NvdW50LmlzQWN0aXZlKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgcmVkdWN0aW9uIG9mIGxvYW4gKHJlZHVjdGlvbiBvZiBwcmluY2lwbGUpIHBlcmNlbnRhZ2VcbiAgICovXG4gIGdldFByaW5jaXBsZVJlZHVjdGlvblBlcmNlbnQoKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbml0aWFsTG9hbnM6IG51bWJlciA9IHRoaXMuZ2V0SW5pdGlhbExvYW5BbW91bnQoKTtcbiAgICBjb25zdCBjdXJyZW50TG9hbnM6IG51bWJlciA9IHRoaXMuZ2V0Q3VycmVudExvYW5BbW91bnQoKTtcblxuICAgIGlmICghaW5pdGlhbExvYW5zKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gKGluaXRpYWxMb2FucyAtIGN1cnJlbnRMb2FucykgLyBpbml0aWFsTG9hbnMgKiAxMDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gb2YgbG9hbiBiYW5rIGFjY291bnRzXG4gICAqL1xuICBnZXRMb2FuQWNjb3VudHMoKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEJhbmtBY2NvdW50Q29sbGVjdGlvbih0aGlzLmdldEJ5VHlwZShUWVBFX0xPQU4pKTtcbiAgfVxuXG4gIGdldCBsb2FucygpOiBMb2FuQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBMb2FuQ29sbGVjdGlvbih0aGlzLmdldExvYW5BY2NvdW50cygpLm1hcCgoYmFua0FjY291bnQpID0+IGJhbmtBY2NvdW50LmxvYW4pKTtcbiAgfVxuXG4gIGdldFNhdmluZ3NBY2NvdW50cygpOiBCYW5rQWNjb3VudENvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQmFua0FjY291bnRDb2xsZWN0aW9uKHRoaXMuZ2V0QnlUeXBlKFRZUEVfTE9BTiwgdHJ1ZSkpO1xuICB9XG5cbiAgZ2V0T3BlbmluZ0JhbGFuY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKHN1bTogbnVtYmVyLCBiYW5rQWNjb3VudDogQmFua0FjY291bnQpOiBudW1iZXIgPT4gc3VtICsgYmFua0FjY291bnQuZ2V0T3BlbmluZ0JhbGFuY2UoKSwgMCk7XG4gIH1cblxuICBnZXQgY3VycmVudEJhbGFuY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdW1CeSgnY3VycmVudEJhbGFuY2UnKTtcbiAgfVxuXG4gIGdldCBiYW5rU2hvcnROYW1lcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bmlxKHRoaXMubWFwKChiYW5rQWNjb3VudCkgPT4gYmFua0FjY291bnQuYmFuay5zaG9ydE5hbWUpKS5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBDb2xsZWN0aW9uIG9mIGJhbmsgYWNjb3VudHMgd2l0aCBwcm9wZXJ0eSB0YW5rIHR5cGVcbiAgICovXG4gIGdldFByb3BlcnR5QmFua0FjY291bnRzKCk6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KTogYm9vbGVhbiA9PiBiYW5rQWNjb3VudC5pc1Byb3BlcnR5VGFuaygpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IENvbGxlY3Rpb24gb2YgYmFuayBhY2NvdW50cyB3aXRoIHdvcmsgdGFuayB0eXBlXG4gICAqL1xuICBnZXRXb3JrQmFua0FjY291bnRzKCk6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KTogYm9vbGVhbiA9PiBiYW5rQWNjb3VudC5pc1dvcmtUYW5rKCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQ29sbGVjdGlvbiBvZiBiYW5rIGFjY291bnRzIGJ5IHRhbmsgdHlwZVxuICAgKi9cbiAgZ2V0QnlUYW5rVHlwZSh0YW5rVHlwZTogVGFua1R5cGVFbnVtKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEJhbmtBY2NvdW50Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpOiBib29sZWFuID0+IGJhbmtBY2NvdW50LnRhbmtUeXBlID09PSB0YW5rVHlwZSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsaXN0IG9mIGFsbCBiYW5rIGFjY291bnQgcHJvcGVydGllc1xuICAgKi9cbiAgZ2V0QmFua0FjY291bnRQcm9wZXJ0aWVzTGlzdCgpOiBCYW5rQWNjb3VudFByb3BlcnR5W10ge1xuICAgIHJldHVybiBmbGF0dGVuKFxuICAgICAgdGhpcy5pdGVtcy5tYXAoKGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCk6IEJhbmtBY2NvdW50UHJvcGVydHlbXSA9PiBiYW5rQWNjb3VudC5iYW5rQWNjb3VudFByb3BlcnRpZXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGlzIG9mIHVuaXF1ZSBwcm9wZXJ0aWVzIGZyb20gYWxsIGJhbmsgYWNjb3VudHMgcHJvcGVydGllc1xuICAgKi9cbiAgZ2V0UHJvcGVydGllcygpOiBQcm9wZXJ0eVtdIHtcbiAgICByZXR1cm4gdW5pcUJ5KFxuICAgICAgdGhpcy5nZXRCYW5rQWNjb3VudFByb3BlcnRpZXNMaXN0KCkubWFwKChiYW5rQWNjb3VudFByb3BlcnR5OiBCYW5rQWNjb3VudFByb3BlcnR5KSA9PiBiYW5rQWNjb3VudFByb3BlcnR5LnByb3BlcnR5KSxcbiAgICAgICdpZCdcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUT0RPIEFsZXggbm90IGVmZmljaWVudCwgZmlsdGVyIGJhbmtBY2NvdW50cyBieSBwcm9wZXJ0eSBmaXJzdFxuICAgKi9cbiAgZ2V0UHJvcGVydHlCYWxhbmNlQW1vdW50KHByb3BlcnR5SWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KTogbnVtYmVyID0+IHN1bSArIGJhbmtBY2NvdW50LmdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eUlkKSwgMCk7XG4gIH1cblxuICBnZXRNb250aGx5UmVwYXltZW50QW1vdW50KHByb3BlcnR5SWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9hbkFjY291bnRzKCkucmVkdWNlKChzdW06IG51bWJlciwgYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KTogbnVtYmVyID0+XG4gICAgICBzdW0gKyBiYW5rQWNjb3VudC5sb2FuLm1vbnRobHlSZXBheW1lbnRBbW91bnQgKiBiYW5rQWNjb3VudC5nZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHlJZCksIDBcbiAgICApO1xuICB9XG5cbiAgZ2V0TFZSKHByb3BlcnR5OiBQcm9wZXJ0eSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlCYWxhbmNlQW1vdW50KHByb3BlcnR5LmlkKSAvIHByb3BlcnR5LmN1cnJlbnRZZWFyRm9yZWNhc3QubWFya2V0VmFsdWU7XG4gIH1cblxuICBnZXRPd24oKTogdGhpcyB7XG4gICAgLy8gVE9ETyBBbGV4L1ZpazogbWF5YmUgd2Ugc2hvdWxkIGdldCBpdCBmcm9tIGp3dFRva2VuIG9yIHRoaW5rIGFib3V0IHNvbWUgbG9jYWxTdG9yYWdlU2VydmljZT9cbiAgICByZXR1cm4gdGhpcy5maWx0ZXIoKGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCkgPT4gYmFua0FjY291bnQuaXNPd25lcigrbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpKSk7XG4gIH1cbn1cbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1hY2NvdW50LmNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvY29sbGVjdGlvbnMvYmFuay1hY2NvdW50LmNvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcxQyxPQUFPLEVBQThDLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsRixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFDbkMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFVBQXVCO0lBQ2hFOztPQUVHO0lBQ0gsU0FBUyxDQUFDLEtBQWtELEVBQUUsU0FBUyxHQUFHLEtBQUs7UUFDN0UsaURBQWlEO1FBQ2pELE1BQU0sVUFBVSxHQUEwQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtZQUNwRCxJQUFJLFNBQVMsRUFBRTtnQkFDYixPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7YUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBVyxFQUFFLFdBQXdCLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwSSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQzthQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsV0FBd0IsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLEVBQVU7UUFDeEIsT0FBTyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBd0IsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLG1CQUF3QyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsTixDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNqQyxXQUFXLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsRUFBRTtnQkFDaEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxHQUFhO1FBQzlCLE9BQU8sSUFBSSxxQkFBcUIsQ0FDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQXdDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDckwsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILHFCQUFxQjtRQUNuQixPQUFPLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRDs7T0FFRztJQUNILDRCQUE0QjtRQUMxQixNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBVyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUV6RCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxDQUFDO1NBQ1Y7UUFFRCxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksR0FBRyxHQUFHLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxXQUF3QixFQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEgsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxxQkFBcUIsQ0FDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUF3QixFQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FDdkYsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUkscUJBQXFCLENBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBd0IsRUFBVyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ25GLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsUUFBc0I7UUFDbEMsT0FBTyxJQUFJLHFCQUFxQixDQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQXdCLEVBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQzVGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCw0QkFBNEI7UUFDMUIsT0FBTyxPQUFPLENBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUF3QixFQUF5QixFQUFFLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQ3ZHLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxNQUFNLENBQ1gsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsbUJBQXdDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUNuSCxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILHdCQUF3QixDQUFDLFVBQWtCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFXLEVBQUUsV0FBd0IsRUFBVSxFQUFFLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6SSxDQUFDO0lBRUQsSUFBSSx1QkFBdUI7UUFDekIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDakMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLEVBQUU7Z0JBQ2hFLGFBQWEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksZ0NBQWdDO1FBQ2xDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ25ELFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUNoRSxlQUFlLElBQUksV0FBVyxDQUFDLHlCQUF5QixDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVELGlDQUFpQyxDQUFDLFVBQWtCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxXQUF3QixFQUFVLEVBQUUsQ0FDckYsR0FBRyxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQzNELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO0lBQy9GLENBQUM7SUFFRCxNQUFNO1FBQ0osK0ZBQStGO1FBQy9GLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRUQsaUNBQWlDLENBQUMsR0FBYTtRQUM3QyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQmFua0FjY291bnRUeXBlRW51bSB9IGZyb20gJy4uL2RiL0VudW1zJztcbmltcG9ydCB7IFRhbmtUeXBlRW51bSB9IGZyb20gJy4uL2RiL0VudW1zL3RhbmstdHlwZS5lbnVtJztcbmltcG9ydCB7IEJhbmtBY2NvdW50LCBCYW5rQWNjb3VudFByb3BlcnR5LCBQcm9wZXJ0eSwgVFlQRV9MT0FOIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCB1bmlxQnkgZnJvbSAnbG9kYXNoL3VuaXFCeSc7XG5pbXBvcnQgdW5pcSBmcm9tICdsb2Rhc2gvdW5pcSc7XG5pbXBvcnQgY29uY2F0IGZyb20gJ2xvZGFzaC9jb25jYXQnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkRpY3Rpb25hcnkgfSBmcm9tICcuL2NvbGxlY3Rpb24tZGljdGlvbmFyeSc7XG5pbXBvcnQgeyBMb2FuQ29sbGVjdGlvbiB9IGZyb20gJy4vbG9hbic7XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBiYW5rIGFjY291bnRzLlxuICovXG5leHBvcnQgY2xhc3MgQmFua0FjY291bnRDb2xsZWN0aW9uIGV4dGVuZHMgQ29sbGVjdGlvbjxCYW5rQWNjb3VudD4ge1xuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgYmFuayBhY2NvdW50cyB3aXRoIHBhc3NlZCB0eXBlc1xuICAgKi9cbiAgZ2V0QnlUeXBlKHR5cGVzOiBCYW5rQWNjb3VudFR5cGVFbnVtIHwgQmFua0FjY291bnRUeXBlRW51bVtdLCBpc0V4Y2x1ZGUgPSBmYWxzZSk6IEJhbmtBY2NvdW50W10ge1xuICAgIC8vIGdldCB0eXBlcyBhbHdheXMgYXMgYXJyYXkgKGlmIG9ubHkgb25lIHBhc3NlZClcbiAgICBjb25zdCB0eXBlc0FycmF5OiBCYW5rQWNjb3VudFR5cGVFbnVtW10gPSBjb25jYXQodHlwZXMpO1xuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiB7XG4gICAgICBpZiAoaXNFeGNsdWRlKSB7XG4gICAgICAgIHJldHVybiAhdHlwZXNBcnJheS5pbmNsdWRlcyhiYW5rQWNjb3VudC50eXBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlc0FycmF5LmluY2x1ZGVzKGJhbmtBY2NvdW50LnR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBhbW91bnQgb2YgaW5pdGlhbCBsb2Fuc1xuICAgKi9cbiAgZ2V0SW5pdGlhbExvYW5BbW91bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCeVR5cGUoVFlQRV9MT0FOKVxuICAgICAgLnJlZHVjZSgoc3VtOiBudW1iZXIsIGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCkgPT4gc3VtICs9IGJhbmtBY2NvdW50LmJhbGFuY2VzLmxlbmd0aCA/IGJhbmtBY2NvdW50LmdldE9wZW5pbmdCYWxhbmNlKCkgOiAwLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYW1vdW50IG9mIGN1cnJlbnQgbG9hbnNcbiAgICovXG4gIGdldEN1cnJlbnRMb2FuQW1vdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnlUeXBlKFRZUEVfTE9BTilcbiAgICAgIC5yZWR1Y2UoKHN1bTogbnVtYmVyLCBiYW5rQWNjb3VudDogQmFua0FjY291bnQpID0+IHN1bSArPSBiYW5rQWNjb3VudC5jdXJyZW50QmFsYW5jZSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbGxlY3Rpb24gZmlsdGVyZWQgYnkgcHJvcGVydHkgaWRcbiAgICovXG4gIGdldEJ5UHJvcGVydHlJZChpZDogbnVtYmVyKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEJhbmtBY2NvdW50Q29sbGVjdGlvbih0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiBiYW5rQWNjb3VudC5iYW5rQWNjb3VudFByb3BlcnRpZXMuZmluZCgoYmFua0FjY291bnRQcm9wZXJ0eTogQmFua0FjY291bnRQcm9wZXJ0eSkgPT4gYmFua0FjY291bnRQcm9wZXJ0eS5wcm9wZXJ0eS5pZCA9PT0gaWQpKSk7XG4gIH1cblxuICBncm91cEJ5UHJvcGVydHkoKTogQ29sbGVjdGlvbkRpY3Rpb25hcnk8QmFua0FjY291bnRDb2xsZWN0aW9uPiB7XG4gICAgY29uc3QgZGljdGlvbmFyeSA9IG5ldyBDb2xsZWN0aW9uRGljdGlvbmFyeShuZXcgQmFua0FjY291bnRDb2xsZWN0aW9uKCkpO1xuXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKChiYW5rQWNjb3VudCkgPT4ge1xuICAgICAgYmFua0FjY291bnQuYmFua0FjY291bnRQcm9wZXJ0aWVzLmZvckVhY2goKGJhbmtBY2NvdW50UHJvcGVydHkpID0+IHtcbiAgICAgICAgZGljdGlvbmFyeS5hZGRUbyhiYW5rQWNjb3VudFByb3BlcnR5LnByb3BlcnR5LmlkLCBiYW5rQWNjb3VudCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBkaWN0aW9uYXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBjb2xsZWN0aW9uIGZpbHRlcmVkIGJ5IHByb3BlcnRpZXMgaWRzXG4gICAqL1xuICBnZXRCeVByb3BlcnRpZXNJZHMoaWRzOiBudW1iZXJbXSk6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiBiYW5rQWNjb3VudC5iYW5rQWNjb3VudFByb3BlcnRpZXMuZmluZCgoYmFua0FjY291bnRQcm9wZXJ0eTogQmFua0FjY291bnRQcm9wZXJ0eSkgPT4gaWRzLmluY2x1ZGVzKGJhbmtBY2NvdW50UHJvcGVydHkucHJvcGVydHkuaWQpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBjb2xsZWN0aW9uIG9mIGFjdGl2ZSBiYW5rIGFjY291bnRzXG4gICAqL1xuICBnZXRBY3RpdmVCYW5rQWNjb3VudHMoKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEJhbmtBY2NvdW50Q29sbGVjdGlvbih0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiBiYW5rQWNjb3VudC5pc0FjdGl2ZSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHJlZHVjdGlvbiBvZiBsb2FuIChyZWR1Y3Rpb24gb2YgcHJpbmNpcGxlKSBwZXJjZW50YWdlXG4gICAqL1xuICBnZXRQcmluY2lwbGVSZWR1Y3Rpb25QZXJjZW50KCk6IG51bWJlciB7XG4gICAgY29uc3QgaW5pdGlhbExvYW5zOiBudW1iZXIgPSB0aGlzLmdldEluaXRpYWxMb2FuQW1vdW50KCk7XG4gICAgY29uc3QgY3VycmVudExvYW5zOiBudW1iZXIgPSB0aGlzLmdldEN1cnJlbnRMb2FuQW1vdW50KCk7XG5cbiAgICBpZiAoIWluaXRpYWxMb2Fucykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIChpbml0aWFsTG9hbnMgLSBjdXJyZW50TG9hbnMpIC8gaW5pdGlhbExvYW5zICogMTAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0aW9uIG9mIGxvYW4gYmFuayBhY2NvdW50c1xuICAgKi9cbiAgZ2V0TG9hbkFjY291bnRzKCk6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24odGhpcy5nZXRCeVR5cGUoVFlQRV9MT0FOKSk7XG4gIH1cblxuICBnZXQgbG9hbnMoKTogTG9hbkNvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgTG9hbkNvbGxlY3Rpb24odGhpcy5nZXRMb2FuQWNjb3VudHMoKS5tYXAoKGJhbmtBY2NvdW50KSA9PiBiYW5rQWNjb3VudC5sb2FuKSk7XG4gIH1cblxuICBnZXRTYXZpbmdzQWNjb3VudHMoKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEJhbmtBY2NvdW50Q29sbGVjdGlvbih0aGlzLmdldEJ5VHlwZShUWVBFX0xPQU4sIHRydWUpKTtcbiAgfVxuXG4gIGdldE9wZW5pbmdCYWxhbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KTogbnVtYmVyID0+IHN1bSArIGJhbmtBY2NvdW50LmdldE9wZW5pbmdCYWxhbmNlKCksIDApO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRCYWxhbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VtQnkoJ2N1cnJlbnRCYWxhbmNlJyk7XG4gIH1cblxuICBnZXQgYmFua1Nob3J0TmFtZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdW5pcSh0aGlzLm1hcCgoYmFua0FjY291bnQpID0+IGJhbmtBY2NvdW50LmJhbmsuc2hvcnROYW1lKSkuam9pbignLCAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQ29sbGVjdGlvbiBvZiBiYW5rIGFjY291bnRzIHdpdGggcHJvcGVydHkgdGFuayB0eXBlXG4gICAqL1xuICBnZXRQcm9wZXJ0eUJhbmtBY2NvdW50cygpOiBCYW5rQWNjb3VudENvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQmFua0FjY291bnRDb2xsZWN0aW9uKFxuICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCk6IGJvb2xlYW4gPT4gYmFua0FjY291bnQuaXNQcm9wZXJ0eVRhbmsoKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBDb2xsZWN0aW9uIG9mIGJhbmsgYWNjb3VudHMgd2l0aCB3b3JrIHRhbmsgdHlwZVxuICAgKi9cbiAgZ2V0V29ya0JhbmtBY2NvdW50cygpOiBCYW5rQWNjb3VudENvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQmFua0FjY291bnRDb2xsZWN0aW9uKFxuICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCk6IGJvb2xlYW4gPT4gYmFua0FjY291bnQuaXNXb3JrVGFuaygpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IENvbGxlY3Rpb24gb2YgYmFuayBhY2NvdW50cyBieSB0YW5rIHR5cGVcbiAgICovXG4gIGdldEJ5VGFua1R5cGUodGFua1R5cGU6IFRhbmtUeXBlRW51bSk6IEJhbmtBY2NvdW50Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBCYW5rQWNjb3VudENvbGxlY3Rpb24oXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KTogYm9vbGVhbiA9PiBiYW5rQWNjb3VudC50YW5rVHlwZSA9PT0gdGFua1R5cGUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGlzdCBvZiBhbGwgYmFuayBhY2NvdW50IHByb3BlcnRpZXNcbiAgICovXG4gIGdldEJhbmtBY2NvdW50UHJvcGVydGllc0xpc3QoKTogQmFua0FjY291bnRQcm9wZXJ0eVtdIHtcbiAgICByZXR1cm4gZmxhdHRlbihcbiAgICAgIHRoaXMuaXRlbXMubWFwKChiYW5rQWNjb3VudDogQmFua0FjY291bnQpOiBCYW5rQWNjb3VudFByb3BlcnR5W10gPT4gYmFua0FjY291bnQuYmFua0FjY291bnRQcm9wZXJ0aWVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpcyBvZiB1bmlxdWUgcHJvcGVydGllcyBmcm9tIGFsbCBiYW5rIGFjY291bnRzIHByb3BlcnRpZXNcbiAgICovXG4gIGdldFByb3BlcnRpZXMoKTogUHJvcGVydHlbXSB7XG4gICAgcmV0dXJuIHVuaXFCeShcbiAgICAgIHRoaXMuZ2V0QmFua0FjY291bnRQcm9wZXJ0aWVzTGlzdCgpLm1hcCgoYmFua0FjY291bnRQcm9wZXJ0eTogQmFua0FjY291bnRQcm9wZXJ0eSkgPT4gYmFua0FjY291bnRQcm9wZXJ0eS5wcm9wZXJ0eSksXG4gICAgICAnaWQnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyBBbGV4IG5vdCBlZmZpY2llbnQsIGZpbHRlciBiYW5rQWNjb3VudHMgYnkgcHJvcGVydHkgZmlyc3RcbiAgICovXG4gIGdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eUlkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLml0ZW1zLnJlZHVjZSgoc3VtOiBudW1iZXIsIGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCk6IG51bWJlciA9PiBzdW0gKyBiYW5rQWNjb3VudC5nZXRQcm9wZXJ0eUJhbGFuY2VBbW91bnQocHJvcGVydHlJZCksIDApO1xuICB9XG5cbiAgZ2V0IHByb3BlcnRpZXNCYWxhbmNlQW1vdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGJhbGFuY2VBbW91bnQgPSAwO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYmFua0FjY291bnQpID0+IHtcbiAgICAgIGJhbmtBY2NvdW50LmJhbmtBY2NvdW50UHJvcGVydGllcy5mb3JFYWNoKChiYW5rQWNjb3VudFByb3BlcnR5KSA9PiB7XG4gICAgICAgIGJhbGFuY2VBbW91bnQgKz0gTWF0aC5hYnMoYmFua0FjY291bnQuZ2V0UHJvcGVydHlCYWxhbmNlQW1vdW50KGJhbmtBY2NvdW50UHJvcGVydHkucHJvcGVydHkuaWQpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhbGFuY2VBbW91bnQ7XG4gIH1cblxuICBnZXQgcHJvcGVydGllc01vbnRobHlSZXBheW1lbnRBbW91bnQoKTogbnVtYmVyIHtcbiAgICBsZXQgcmVwYXltZW50QW1vdW50ID0gMDtcbiAgICB0aGlzLmdldExvYW5BY2NvdW50cygpLml0ZW1zLmZvckVhY2goKGJhbmtBY2NvdW50KSA9PiB7XG4gICAgICBiYW5rQWNjb3VudC5iYW5rQWNjb3VudFByb3BlcnRpZXMuZm9yRWFjaCgoYmFua0FjY291bnRQcm9wZXJ0eSkgPT4ge1xuICAgICAgICByZXBheW1lbnRBbW91bnQgKz0gYmFua0FjY291bnQuZ2V0TW9udGhseVJlcGF5bWVudEFtb3VudChiYW5rQWNjb3VudFByb3BlcnR5LnByb3BlcnR5LmlkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlcGF5bWVudEFtb3VudDtcbiAgfVxuXG4gIGdldFByb3BlcnR5TW9udGhseVJlcGF5bWVudEFtb3VudChwcm9wZXJ0eUlkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldExvYW5BY2NvdW50cygpLnJlZHVjZSgoc3VtOiBudW1iZXIsIGJhbmtBY2NvdW50OiBCYW5rQWNjb3VudCk6IG51bWJlciA9PlxuICAgICAgc3VtICsgYmFua0FjY291bnQuZ2V0TW9udGhseVJlcGF5bWVudEFtb3VudChwcm9wZXJ0eUlkKSwgMFxuICAgICk7XG4gIH1cblxuICBnZXRMVlIocHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eUJhbGFuY2VBbW91bnQocHJvcGVydHkuaWQpIC8gcHJvcGVydHkuY3VycmVudFllYXJGb3JlY2FzdC5tYXJrZXRWYWx1ZTtcbiAgfVxuXG4gIGdldE93bigpOiB0aGlzIHtcbiAgICAvLyBUT0RPIEFsZXgvVmlrOiBtYXliZSB3ZSBzaG91bGQgZ2V0IGl0IGZyb20gand0VG9rZW4gb3IgdGhpbmsgYWJvdXQgc29tZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlP1xuICAgIHJldHVybiB0aGlzLmZpbHRlcigoYmFua0FjY291bnQ6IEJhbmtBY2NvdW50KSA9PiBiYW5rQWNjb3VudC5pc093bmVyKCtsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJykpKTtcbiAgfVxuXG4gIGdldEFjdGl2ZUxvYW5BY2NvdW50c0J5UHJvcGVydGllcyhpZHM6IG51bWJlcltdKTogQmFua0FjY291bnRDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVCYW5rQWNjb3VudHMoKS5nZXRMb2FuQWNjb3VudHMoKS5nZXRCeVByb3BlcnRpZXNJZHMoaWRzKTtcbiAgfVxufVxuIl19
@@ -2,6 +2,7 @@ import get from 'lodash/get';
2
2
  import flatten from 'lodash/flatten';
3
3
  import hasIn from 'lodash/hasIn';
4
4
  import intersection from 'lodash/intersection';
5
+ import uniqBy from 'lodash/uniqBy';
5
6
  /**
6
7
  * List of collections grouped by passed property
7
8
  */
@@ -45,13 +46,13 @@ export class CollectionDictionary {
45
46
  return this.items[key] ? this.items[key] : this.createCollection([]);
46
47
  }
47
48
  /**
48
- * Join several collections by ids
49
+ * Join several collections by ids, return collection of uniq models (skip duplicates)
49
50
  */
50
51
  merge(keys) {
51
52
  if (!this.length) {
52
53
  return this.createCollection([]);
53
54
  }
54
- return this.createCollection(flatten(keys.map((key) => this.get(key.toString()).items)));
55
+ return this.createCollection(uniqBy(flatten(keys.map((key) => this.get(key.toString()).items)), 'id'));
55
56
  }
56
57
  /**
57
58
  * Create instance of collection
@@ -104,4 +105,4 @@ export class CollectionDictionary {
104
105
  });
105
106
  }
106
107
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL2NvbGxlY3Rpb25zL2NvbGxlY3Rpb24tZGljdGlvbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBR2pDLE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQVcvQixZQUFZLFVBQXNCLEVBQUUsT0FBZSxJQUFJO1FBVnZEOztXQUVHO1FBQ0gsVUFBSyxHQUFrQyxFQUFFLENBQUM7UUFReEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxXQUFrRCxDQUFDO1FBQzNGLGdFQUFnRTtRQUNoRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsR0FBb0IsRUFBRSxHQUFHLE1BQXVCO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7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LENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsaUNBQWlDO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFRLEVBQUU7WUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC9nZXQnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IGhhc0luIGZyb20gJ2xvZGFzaC9oYXNJbic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uIGFzIEJhc2VDb2xsZWN0aW9uIH0gZnJvbSAnLi9jb2xsZWN0aW9uJztcbmltcG9ydCB7QWJzdHJhY3RNb2RlbH0gZnJvbSAnLi4vZGIvTW9kZWxzJztcbmltcG9ydCBpbnRlcnNlY3Rpb24gZnJvbSAnbG9kYXNoL2ludGVyc2VjdGlvbic7XG5cbi8qKlxuICogTGlzdCBvZiBjb2xsZWN0aW9ucyBncm91cGVkIGJ5IHBhc3NlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkRpY3Rpb25hcnk8Q29sbGVjdGlvbiBleHRlbmRzIEJhc2VDb2xsZWN0aW9uPEFic3RyYWN0TW9kZWw+PiB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGdyb3VwZWQgY29sbGVjdGlvbnNcbiAgICovXG4gIGl0ZW1zOiB7IFtrZXk6IHN0cmluZ106IENvbGxlY3Rpb24gfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBmdW5jdGlvbiBvZiBwYXNzZWQgY29sbGVjdGlvbiBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0aW9uQ29uc3RydWN0b3I6IG5ldyAoaXRlbXM6IG9iamVjdFtdKSA9PiBDb2xsZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbGxlY3Rpb246IENvbGxlY3Rpb24sIHBhdGg6IHN0cmluZyA9ICdpZCcpIHtcbiAgICB0aGlzLmNvbGxlY3Rpb25Db25zdHJ1Y3RvciA9IGNvbGxlY3Rpb24uY29uc3RydWN0b3IgYXMgbmV3IChpdGVtczogb2JqZWN0W10pID0+IENvbGxlY3Rpb247XG4gICAgLy8gZ3JvdXAgaWYgcHJvdmlkZWQgcGF0aCB3YXMgZm91bmQgaW4gdGhlIDFzdCBjb2xsZWN0aW9uJ3MgaXRlbVxuICAgIGlmIChjb2xsZWN0aW9uLmxlbmd0aCAmJiBoYXNJbihjb2xsZWN0aW9uLml0ZW1zWzBdLCBwYXRoLnNwbGl0KCcuJylbMF0pKSB7XG4gICAgICB0aGlzLmdyb3VwSXRlbXMoY29sbGVjdGlvbiwgcGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgY29sbGVjdGlvbnMga2V5c1xuICAgKi9cbiAgZ2V0IGtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLml0ZW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXNoIG5ldyBlbGVtZW50cyBpbiBleGlzdGluZyBpdGVtXG4gICAqL1xuICBhZGRUbyhrZXk6IHN0cmluZyB8IG51bWJlciwgLi4ubW9kZWxzOiBBYnN0cmFjdE1vZGVsW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNba2V5XSkge1xuICAgICAgdGhpcy5hZGQoa2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLml0ZW1zW2tleV0ucHVzaCguLi5tb2RlbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgaXRlbSBieSBrZXlcbiAgICovXG4gIGFkZChrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IENvbGxlY3Rpb24gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oW10pKSB7XG4gICAgdGhpcy5pdGVtc1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gYnkga2V5IG9yIHJldHVybiBlbXB0eSBjb2xsZWN0aW9uIGlmIGtleSBkb2VzIG5vdCBleGlzdFxuICAgKi9cbiAgZ2V0KGtleTogc3RyaW5nIHwgbnVtYmVyKTogQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNba2V5XSA/IHRoaXMuaXRlbXNba2V5XSA6IHRoaXMuY3JlYXRlQ29sbGVjdGlvbihbXSk7XG4gIH1cblxuICAvKipcbiAgICogSm9pbiBzZXZlcmFsIGNvbGxlY3Rpb25zIGJ5IGlkc1xuICAgKi9cbiAgbWVyZ2Uoa2V5czogbnVtYmVyW10pOiBDb2xsZWN0aW9uIHtcbiAgICBpZiAoIXRoaXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb2xsZWN0aW9uKFtdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDb2xsZWN0aW9uKFxuICAgICAgZmxhdHRlbihcbiAgICAgICAga2V5cy5tYXAoKGtleTogbnVtYmVyKTogb2JqZWN0W10gPT4gdGhpcy5nZXQoa2V5LnRvU3RyaW5nKCkpLml0ZW1zKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGluc3RhbmNlIG9mIGNvbGxlY3Rpb25cbiAgICovXG4gIGNyZWF0ZUNvbGxlY3Rpb24oaXRlbXM6IG9iamVjdFtdID0gW10pOiBDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IHRoaXMuY29sbGVjdGlvbkNvbnN0cnVjdG9yKGl0ZW1zKTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5rZXlzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVG9kbyBmaW5kIGEgYmV0dGVyIHNvbHV0aW9uIHRvIGdldCBsaXN0IG9mIHRoZSBzb3J0ZWQga2V5c1xuICAgKiBHZXQgYXJyYXkgb2YgdGhlIFwia2V5c1wiIGJ5IHByb3ZpZGVkIG9yZGVyXG4gICAqL1xuICBnZXRTb3J0ZWRLZXlzKGlzRGVzYyA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmtleXMuc29ydCgoYTogYW55LCBiOiBhbnkpOiBudW1iZXIgPT4ge1xuICAgICAgaWYgKGEgPiBiKSB7IHJldHVybiAhaXNEZXNjID8gMSA6IC0xOyB9XG4gICAgICBpZiAoYSA8IGIpIHsgcmV0dXJuICFpc0Rlc2MgPyAtMSA6IDE7IH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG5cbiAga2V5c0ludGVyc2VjdGlvbihrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBpbnRlcnNlY3Rpb24oa2V5cy5tYXAoKGtleTogc3RyaW5nIHwgbnVtYmVyKSA9PiBrZXkudG9TdHJpbmcoKSksIHRoaXMua2V5cyk7XG4gIH1cblxuICAvKipcbiAgICogR3JvdXAgY29sbGVjdGlvbiBpdGVtcyBieSBwYXNzZWQgcGF0aCBpbnRvIGl0ZW1zIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBncm91cEl0ZW1zKGNvbGxlY3Rpb246IENvbGxlY3Rpb24sIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIENyZWF0ZSBlbXB0eSBpbml0aWFsIG9iamVjdCBmb3IgZ3JvdXBzXG4gICAgY29uc3Qgb2JqOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PG9iamVjdD4gfSA9IHt9O1xuXG4gICAgLy8gR3JvdXAgY29sbGVjdGlvbiBpdGVtc1xuICAgIGNvbGxlY3Rpb24uaXRlbXMuZm9yRWFjaCgoaXRlbTogb2JqZWN0KTogdm9pZCA9PiB7XG4gICAgICBsZXQga2V5OiBzdHJpbmcgPSBnZXQoaXRlbSwgcGF0aCk7XG5cbiAgICAgIC8vIGlmIG9iamVjdCBkb2VzIG5vdCBoYXZlIHByb3BlcnR5IGZvciBncm91cGluZyBpdCB3aWxsIGJlIGdyb3VwZWQgYXMgJ290aGVyJ1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGtleSA9ICdvdGhlcic7XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqW2tleV0pIHtcbiAgICAgICAgb2JqW2tleV0gPSBbXTtcbiAgICAgIH1cblxuICAgICAgb2JqW2tleV0ucHVzaChpdGVtKTtcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBjb2xsZWN0aW9ucyBmcm9tIGdyb3Vwc1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMuaXRlbXNba2V5XSA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbihvYmpba2V5XSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL2NvbGxlY3Rpb25zL2NvbGxlY3Rpb24tZGljdGlvbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBR2pDLE9BQU8sWUFBWSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUVuQzs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFXL0IsWUFBWSxVQUFzQixFQUFFLE9BQWUsSUFBSTtRQVZ2RDs7V0FFRztRQUNILFVBQUssR0FBa0MsRUFBRSxDQUFDO1FBUXhDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxVQUFVLENBQUMsV0FBa0QsQ0FBQztRQUMzRixnRUFBZ0U7UUFDaEUsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksSUFBSTtRQUNOLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEdBQW9CLEVBQUUsR0FBRyxNQUF1QjtRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxHQUFvQixFQUFFLFFBQW9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRyxDQUFDLEdBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUF5QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNsQztRQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFvQixFQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQ3BHLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUFrQixFQUFFO1FBQ25DLE9BQU8sSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxNQUFNLEdBQUcsS0FBSztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBVSxFQUFFO1lBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQUU7WUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBRTtZQUN2QyxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQXlCO1FBQ3hDLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVSxDQUFDLFVBQXNCLEVBQUUsSUFBWTtRQUNyRCx5Q0FBeUM7UUFDekMsTUFBTSxHQUFHLEdBQXFDLEVBQUUsQ0FBQztRQUVqRCx5QkFBeUI7UUFDekIsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQVEsRUFBRTtZQUM5QyxJQUFJLEdBQUcsR0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWxDLDhFQUE4RTtZQUM5RSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7Z0JBQ3JCLEdBQUcsR0FBRyxPQUFPLENBQUM7YUFDZjtZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNmO1lBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILGlDQUFpQztRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBUSxFQUFFO1lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcbmltcG9ydCBmbGF0dGVuIGZyb20gJ2xvZGFzaC9mbGF0dGVuJztcbmltcG9ydCBoYXNJbiBmcm9tICdsb2Rhc2gvaGFzSW4nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiBhcyBCYXNlQ29sbGVjdGlvbiB9IGZyb20gJy4vY29sbGVjdGlvbic7XG5pbXBvcnQge0Fic3RyYWN0TW9kZWx9IGZyb20gJy4uL2RiL01vZGVscyc7XG5pbXBvcnQgaW50ZXJzZWN0aW9uIGZyb20gJ2xvZGFzaC9pbnRlcnNlY3Rpb24nO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gvdW5pcUJ5JztcblxuLyoqXG4gKiBMaXN0IG9mIGNvbGxlY3Rpb25zIGdyb3VwZWQgYnkgcGFzc2VkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRGljdGlvbmFyeTxDb2xsZWN0aW9uIGV4dGVuZHMgQmFzZUNvbGxlY3Rpb248QWJzdHJhY3RNb2RlbD4+IHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgZ3JvdXBlZCBjb2xsZWN0aW9uc1xuICAgKi9cbiAgaXRlbXM6IHsgW2tleTogc3RyaW5nXTogQ29sbGVjdGlvbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIGZ1bmN0aW9uIG9mIHBhc3NlZCBjb2xsZWN0aW9uIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3Rpb25Db25zdHJ1Y3RvcjogbmV3IChpdGVtczogb2JqZWN0W10pID0+IENvbGxlY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29sbGVjdGlvbjogQ29sbGVjdGlvbiwgcGF0aDogc3RyaW5nID0gJ2lkJykge1xuICAgIHRoaXMuY29sbGVjdGlvbkNvbnN0cnVjdG9yID0gY29sbGVjdGlvbi5jb25zdHJ1Y3RvciBhcyBuZXcgKGl0ZW1zOiBvYmplY3RbXSkgPT4gQ29sbGVjdGlvbjtcbiAgICAvLyBncm91cCBpZiBwcm92aWRlZCBwYXRoIHdhcyBmb3VuZCBpbiB0aGUgMXN0IGNvbGxlY3Rpb24ncyBpdGVtXG4gICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoICYmIGhhc0luKGNvbGxlY3Rpb24uaXRlbXNbMF0sIHBhdGguc3BsaXQoJy4nKVswXSkpIHtcbiAgICAgIHRoaXMuZ3JvdXBJdGVtcyhjb2xsZWN0aW9uLCBwYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBvZiBjb2xsZWN0aW9ucyBrZXlzXG4gICAqL1xuICBnZXQga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIHB1c2ggbmV3IGVsZW1lbnRzIGluIGV4aXN0aW5nIGl0ZW1cbiAgICovXG4gIGFkZFRvKGtleTogc3RyaW5nIHwgbnVtYmVyLCAuLi5tb2RlbHM6IEFic3RyYWN0TW9kZWxbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pdGVtc1trZXldKSB7XG4gICAgICB0aGlzLmFkZChrZXkpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXNba2V5XS5wdXNoKC4uLm1vZGVscyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyBpdGVtIGJ5IGtleVxuICAgKi9cbiAgYWRkKGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogQ29sbGVjdGlvbiA9IHRoaXMuY3JlYXRlQ29sbGVjdGlvbihbXSkpIHtcbiAgICB0aGlzLml0ZW1zW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBieSBrZXkgb3IgcmV0dXJuIGVtcHR5IGNvbGxlY3Rpb24gaWYga2V5IGRvZXMgbm90IGV4aXN0XG4gICAqL1xuICBnZXQoa2V5OiBzdHJpbmcgfCBudW1iZXIpOiBDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1trZXldID8gdGhpcy5pdGVtc1trZXldIDogdGhpcy5jcmVhdGVDb2xsZWN0aW9uKFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKb2luIHNldmVyYWwgY29sbGVjdGlvbnMgYnkgaWRzLCByZXR1cm4gY29sbGVjdGlvbiBvZiB1bmlxIG1vZGVscyAoc2tpcCBkdXBsaWNhdGVzKVxuICAgKi9cbiAgbWVyZ2Uoa2V5czogbnVtYmVyW10gfCBzdHJpbmdbXSk6IENvbGxlY3Rpb24ge1xuICAgIGlmICghdGhpcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oW10pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oXG4gICAgICB1bmlxQnkoZmxhdHRlbihrZXlzLm1hcCgoa2V5OiBudW1iZXIgfCBzdHJpbmcpOiBvYmplY3RbXSA9PiB0aGlzLmdldChrZXkudG9TdHJpbmcoKSkuaXRlbXMpKSwgJ2lkJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBpbnN0YW5jZSBvZiBjb2xsZWN0aW9uXG4gICAqL1xuICBjcmVhdGVDb2xsZWN0aW9uKGl0ZW1zOiBvYmplY3RbXSA9IFtdKTogQ29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyB0aGlzLmNvbGxlY3Rpb25Db25zdHJ1Y3RvcihpdGVtcyk7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMua2V5cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQFRvZG8gZmluZCBhIGJldHRlciBzb2x1dGlvbiB0byBnZXQgbGlzdCBvZiB0aGUgc29ydGVkIGtleXNcbiAgICogR2V0IGFycmF5IG9mIHRoZSBcImtleXNcIiBieSBwcm92aWRlZCBvcmRlclxuICAgKi9cbiAgZ2V0U29ydGVkS2V5cyhpc0Rlc2MgPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5rZXlzLnNvcnQoKGE6IGFueSwgYjogYW55KTogbnVtYmVyID0+IHtcbiAgICAgIGlmIChhID4gYikgeyByZXR1cm4gIWlzRGVzYyA/IDEgOiAtMTsgfVxuICAgICAgaWYgKGEgPCBiKSB7IHJldHVybiAhaXNEZXNjID8gLTEgOiAxOyB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgfVxuXG4gIGtleXNJbnRlcnNlY3Rpb24oa2V5czogc3RyaW5nW10gfCBudW1iZXJbXSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gaW50ZXJzZWN0aW9uKGtleXMubWFwKChrZXk6IHN0cmluZyB8IG51bWJlcikgPT4ga2V5LnRvU3RyaW5nKCkpLCB0aGlzLmtleXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwIGNvbGxlY3Rpb24gaXRlbXMgYnkgcGFzc2VkIHBhdGggaW50byBpdGVtcyBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgZ3JvdXBJdGVtcyhjb2xsZWN0aW9uOiBDb2xsZWN0aW9uLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDcmVhdGUgZW1wdHkgaW5pdGlhbCBvYmplY3QgZm9yIGdyb3Vwc1xuICAgIGNvbnN0IG9iajogeyBba2V5OiBzdHJpbmddOiBBcnJheTxvYmplY3Q+IH0gPSB7fTtcblxuICAgIC8vIEdyb3VwIGNvbGxlY3Rpb24gaXRlbXNcbiAgICBjb2xsZWN0aW9uLml0ZW1zLmZvckVhY2goKGl0ZW06IG9iamVjdCk6IHZvaWQgPT4ge1xuICAgICAgbGV0IGtleTogc3RyaW5nID0gZ2V0KGl0ZW0sIHBhdGgpO1xuXG4gICAgICAvLyBpZiBvYmplY3QgZG9lcyBub3QgaGF2ZSBwcm9wZXJ0eSBmb3IgZ3JvdXBpbmcgaXQgd2lsbCBiZSBncm91cGVkIGFzICdvdGhlcidcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBrZXkgPSAnb3RoZXInO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9ialtrZXldKSB7XG4gICAgICAgIG9ialtrZXldID0gW107XG4gICAgICB9XG5cbiAgICAgIG9ialtrZXldLnB1c2goaXRlbSk7XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgY29sbGVjdGlvbnMgZnJvbSBncm91cHNcbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goKGtleTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLml0ZW1zW2tleV0gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24ob2JqW2tleV0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { Collection } from '../collection';
2
- import { FinancialYear } from '../../models/financial-year/financial-year';
2
+ import { FinancialYear } from '../../models';
3
3
  import uniqBy from 'lodash/uniqBy';
4
4
  export class PropertyCollection extends Collection {
5
5
  /**
@@ -108,5 +108,8 @@ export class PropertyCollection extends Collection {
108
108
  newItems.unshift(...bestProperties);
109
109
  return this.create(newItems);
110
110
  }
111
+ get netIncome() {
112
+ return this.sumBy('currentYearForecast.income') + this.sumBy('currentYearForecast.expense');
113
+ }
111
114
  }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9jb2xsZWN0aW9ucy9wcm9wZXJ0eS9wcm9wZXJ0eS5jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRTNFLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQU1uQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsVUFBb0I7SUFDMUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEVBQVU7UUFDeEIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWtCLEVBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUNoRixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFrQixFQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFrQixFQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQjtRQUNqQixPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBa0IsRUFB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RUQsTUFBTSxjQUFjLEdBQWUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDcEQsZ0JBQWdCLENBQUMsZ0NBQWdDLEVBQUU7WUFDbkQsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztTQUM1RSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEIsTUFBTSxRQUFRLEdBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFFcEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi9jb2xsZWN0aW9uJztcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5JztcbmltcG9ydCB7IEZpbmFuY2lhbFllYXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmluYW5jaWFsLXllYXIvZmluYW5jaWFsLXllYXInO1xuaW1wb3J0IHsgUHJvcGVydHlDYXRlZ29yeSB9IGZyb20gJy4uLy4uL21vZGVscy9wcm9wZXJ0eS9wcm9wZXJ0eS1jYXRlZ29yeSc7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuaW1wb3J0IHsgRGVwcmVjaWF0aW9uQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RlcHJlY2lhdGlvbi5jb2xsZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQ29sbGVjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uLmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkRpY3Rpb25hcnkgfSBmcm9tICcuLi9jb2xsZWN0aW9uLWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgUHJvcGVydHlTYWxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LXNhbGUvcHJvcGVydHktc2FsZSc7XG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUNvbGxlY3Rpb24gZXh0ZW5kcyBDb2xsZWN0aW9uPFByb3BlcnR5PiB7XG4gIC8qKlxuICAgKiBHZXQgbmV3IHByb3BlcnR5IGNvbGxlY3Rpb24gZmlsdGVyZWQgYnkgY2F0ZWdvcnkgaWRcbiAgICogQHBhcmFtIGlkIGlkIG9mIGNhdGVnb3J5IGZvciBmaWx0ZXJcbiAgICovXG4gIGdldEJ5Q2F0ZWdvcnlJZChpZDogbnVtYmVyKTogUHJvcGVydHlDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFByb3BlcnR5Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuID0+IHByb3BlcnR5LmNhdGVnb3J5LmlkID09PSBpZClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuZXcgcHJvcGVydHkgY29sbGVjdGlvbiBmaWx0ZXJlZCBieSBhY3RpdmUgc3RhdHVzXG4gICAqL1xuICBnZXRBY3RpdmVQcm9wZXJ0aWVzKCk6IFByb3BlcnR5Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBQcm9wZXJ0eUNvbGxlY3Rpb24oXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwcm9wZXJ0eS5pc0FjdGl2ZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0Q3JlYXRlZFByb3BlcnRpZXMoKTogUHJvcGVydHlDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFByb3BlcnR5Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuID0+IHByb3BlcnR5LmlzT3duKCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbmV3IHByb3BlcnR5IGNvbGxlY3Rpb24gZmlsdGVyZWQgYnkgc2hhcmVkXG4gICAqL1xuICBnZXRTaGFyZWRQcm9wZXJ0aWVzKCk6IFByb3BlcnR5Q29sbGVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBQcm9wZXJ0eUNvbGxlY3Rpb24oXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiA9PiAhcHJvcGVydHkuaXNPd24oKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgdGhhdCBhcmUgdGF4ZWQgYW5kIHdpbGwgYmUgaW5jbHVkZWQgaW4gcmVwb3J0cyAoVGF4IHN1bW1hcnksIE15IHRheCByZXBvcnQsIGUudC5jLilcbiAgICovXG4gIGdldFRheEluY2x1c2l2ZSgpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KSA9PiBwcm9wZXJ0eS5jYXRlZ29yeS5pc1RheEluY2x1c2l2ZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0VW5zb2xkKCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpID0+ICFwcm9wZXJ0eS5pc1NvbGQoKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0b3RhbCBwdXJjaGFzZSBwcmljZSBmb3IgYWxsIHByb3BlcnRpZXMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIGdldCBwdXJjaGFzZVByaWNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VtQnkoJ3B1cmNoYXNlUHJpY2UnKTtcbiAgfVxuXG4gIGdldCBncm93dGhQZXJjZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VtQnkoJ2dyb3d0aFBlcmNlbnQnKTtcbiAgfVxuXG4gIGdldCBtYXJrZXRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN1bUJ5KCdtYXJrZXRWYWx1ZScpO1xuICB9XG5cbiAgZ2V0IGZpcnN0Rm9yZWNhc3RZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChtaW46IG51bWJlciwgcHJvcGVydHk6IFByb3BlcnR5KTogbnVtYmVyID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQ6IG51bWJlciA9IHByb3BlcnR5LmZpcnN0Rm9yZWNhc3RZZWFyO1xuICAgICAgcmV0dXJuIG1pbiA+IGN1cnJlbnQgPyBjdXJyZW50IDogbWluO1xuICAgIH0sIG5ldyBGaW5hbmNpYWxZZWFyKCkueWVhcik7XG4gIH1cblxuICBnZXQgbWFya2V0VmFsdWVHcm93dGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMubWFya2V0VmFsdWUgLSB0aGlzLnB1cmNoYXNlUHJpY2UpIC8gdGhpcy5wdXJjaGFzZVByaWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGxpc3Qgb2YgcHJvcGVydGllc1xuICAgKi9cbiAgZ2V0Q0dUQXBwbGljYWJsZSgpOiB0aGlzIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KSA9PiBwcm9wZXJ0eS5pc0NHVEFwcGxpY2FibGUoKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0T3duZXJPY2N1cGllZFByb3BlcnRpZXMoKTogUHJvcGVydHlDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFByb3BlcnR5Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuID0+IHByb3BlcnR5LmNhdGVnb3J5LmlzT3duZXJPY2N1cGllZCgpKVxuICAgICk7XG4gIH1cblxuICBnZXQgZWFybGllc3RDb250cmFjdERhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChtaW46IERhdGUsIHByb3BlcnR5OiBQcm9wZXJ0eSk6IERhdGUgPT4gbWluIDwgcHJvcGVydHkuY29udHJhY3REYXRlID8gbWluIDogcHJvcGVydHkuY29udHJhY3REYXRlLCBuZXcgRmluYW5jaWFsWWVhcihuZXcgRGF0ZSgpKS5zdGFydERhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsaXN0IG9mIHVuaXF1ZSBwcm9wZXJ0eSBjYXRlZ29yaWVzIGZyb20gY29sbGVjdGlvblxuICAgKi9cbiAgZ2V0Q2F0ZWdvcmllcygpOiBQcm9wZXJ0eUNhdGVnb3J5W10ge1xuICAgIHJldHVybiB1bmlxQnkodGhpcy5pdGVtcy5tYXAoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IFByb3BlcnR5Q2F0ZWdvcnkgPT4gcHJvcGVydHkuY2F0ZWdvcnkpLCAnaWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJvcGVydHkgd2l0aCB0aGUgaGlnaGVzdCBncm93dGggcGVyY2VudFxuICAgKi9cbiAgZ2V0QmVzdFBlcmZvcm1hbmNlR3Jvd3RoUHJvcGVydHkoKTogUHJvcGVydHkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zLnJlZHVjZSgobWF4OiBQcm9wZXJ0eSwgY3VycmVudDogUHJvcGVydHkpOiBQcm9wZXJ0eSA9PiBtYXguZ3Jvd3RoUGVyY2VudCA8IGN1cnJlbnQuZ3Jvd3RoUGVyY2VudCA/IGN1cnJlbnQgOiBtYXgsIHRoaXMuZmlyc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcm9wZXJ0eSB3aXRoIHRoZSBsb3dlc3QgdGF4IHBvc2l0aW9uXG4gICAqL1xuICBnZXRCZXN0UGVyZm9ybWFuY2VUYXhQcm9wZXJ0eSh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uQ29sbGVjdGlvbiwgZGVwcmVjaWF0aW9uczogRGVwcmVjaWF0aW9uQ29sbGVjdGlvbik6IFByb3BlcnR5IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbnNCeVByb3BlcnR5OiBDb2xsZWN0aW9uRGljdGlvbmFyeTxUcmFuc2FjdGlvbkNvbGxlY3Rpb24+ID0gdHJhbnNhY3Rpb25zLmdyb3VwQnkoJ3Byb3BlcnR5LmlkJyk7XG4gICAgY29uc3QgZGVwcmVjaWF0aW9uc0J5UHJvcGVydHk6IENvbGxlY3Rpb25EaWN0aW9uYXJ5PERlcHJlY2lhdGlvbkNvbGxlY3Rpb24+ID0gZGVwcmVjaWF0aW9ucy5ncm91cEJ5KCdwcm9wZXJ0eS5pZCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChtaW46IFByb3BlcnR5LCBjdXJyZW50OiBQcm9wZXJ0eSk6IFByb3BlcnR5ID0+IHtcbiAgICAgIGNvbnN0IG1pblRheFBvc2l0aW9uOiBudW1iZXIgPSBtaW4uZ2V0VGF4UG9zaXRpb24odHJhbnNhY3Rpb25zQnlQcm9wZXJ0eS5nZXQobWluLmlkKSwgZGVwcmVjaWF0aW9uc0J5UHJvcGVydHkuZ2V0KG1pbi5pZCkpO1xuICAgICAgY29uc3QgY3VycmVudFRheFBvc2l0aW9uOiBudW1iZXIgPSBjdXJyZW50LmdldFRheFBvc2l0aW9uKHRyYW5zYWN0aW9uc0J5UHJvcGVydHkuZ2V0KGN1cnJlbnQuaWQpLCBkZXByZWNpYXRpb25zQnlQcm9wZXJ0eS5nZXQoY3VycmVudC5pZCkpO1xuXG4gICAgICByZXR1cm4gbWluVGF4UG9zaXRpb24gPiBjdXJyZW50VGF4UG9zaXRpb24gPyBjdXJyZW50IDogbWluO1xuICAgIH0sIHRoaXMuZmlyc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgYmVzdCBwZXJmb3JtYW5jZSBwcm9wZXJ0aWVzIGZpcnN0XG4gICAqIGh0dHBzOi8vdGF4dGFuay5hdGxhc3NpYW4ubmV0L3dpa2kvc3BhY2VzL1RBWFRBTksvcGFnZXMvMjE3Njc3OTk3L1Byb3BlcnR5K1RhbmsrRGFzaGJvYXJkXG4gICAqL1xuICBzb3J0QnlCZXN0UGVyZm9ybWFuY2UodHJhbnNhY3Rpb25zOiBUcmFuc2FjdGlvbkNvbGxlY3Rpb24sIGRlcHJlY2lhdGlvbnM6IERlcHJlY2lhdGlvbkNvbGxlY3Rpb24pOiB0aGlzIHtcbiAgICBjb25zdCBhY3RpdmVQcm9wZXJ0aWVzOiBQcm9wZXJ0eUNvbGxlY3Rpb24gPSB0aGlzLmdldEFjdGl2ZVByb3BlcnRpZXMoKTtcblxuICAgIC8vIG5vdGhpbmcgdG8gc29ydCB3aGVuIG5vIGFjdGl2ZSBwcm9wZXJ0aWVzXG4gICAgaWYgKCFhY3RpdmVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3QgYmVzdFByb3BlcnRpZXM6IFByb3BlcnR5W10gPSB1bmlxQnkodGhpcy5jcmVhdGUoW1xuICAgICAgYWN0aXZlUHJvcGVydGllcy5nZXRCZXN0UGVyZm9ybWFuY2VHcm93dGhQcm9wZXJ0eSgpLFxuICAgICAgYWN0aXZlUHJvcGVydGllcy5nZXRCZXN0UGVyZm9ybWFuY2VUYXhQcm9wZXJ0eSh0cmFuc2FjdGlvbnMsIGRlcHJlY2lhdGlvbnMpXG4gICAgXSkudG9BcnJheSgpLCAnaWQnKTtcblxuICAgIGNvbnN0IG5ld0l0ZW1zOiBQcm9wZXJ0eVtdID0gdGhpcy5kaWZmKGJlc3RQcm9wZXJ0aWVzKS50b0FycmF5KCk7XG4gICAgbmV3SXRlbXMudW5zaGlmdCguLi5iZXN0UHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGUobmV3SXRlbXMpO1xuICB9XG59XG4iXX0=
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9jb2xsZWN0aW9ucy9wcm9wZXJ0eS9wcm9wZXJ0eS5jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUE4QixhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBS25DLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxVQUFvQjtJQUMxRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsRUFBVTtRQUN4QixPQUFPLElBQUksa0JBQWtCLENBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBa0IsRUFBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWtCLEVBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLGtCQUFrQixDQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQWtCLEVBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CO1FBQ2pCLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFrQixFQUFX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RCxNQUFNLGNBQWMsR0FBZSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNwRCxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNuRCxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO1NBQzVFLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVwQixNQUFNLFFBQVEsR0FBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUVwQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUM5RixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29sbGVjdGlvbic7XG5pbXBvcnQgeyBQcm9wZXJ0eSwgUHJvcGVydHlDYXRlZ29yeSwgRmluYW5jaWFsWWVhciB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgdW5pcUJ5IGZyb20gJ2xvZGFzaC91bmlxQnknO1xuaW1wb3J0IHsgRGVwcmVjaWF0aW9uQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RlcHJlY2lhdGlvbi5jb2xsZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQ29sbGVjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IENvbGxlY3Rpb25EaWN0aW9uYXJ5IH0gZnJvbSAnLi4vY29sbGVjdGlvbi1kaWN0aW9uYXJ5JztcblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5Q29sbGVjdGlvbiBleHRlbmRzIENvbGxlY3Rpb248UHJvcGVydHk+IHtcbiAgLyoqXG4gICAqIEdldCBuZXcgcHJvcGVydHkgY29sbGVjdGlvbiBmaWx0ZXJlZCBieSBjYXRlZ29yeSBpZFxuICAgKiBAcGFyYW0gaWQgaWQgb2YgY2F0ZWdvcnkgZm9yIGZpbHRlclxuICAgKi9cbiAgZ2V0QnlDYXRlZ29yeUlkKGlkOiBudW1iZXIpOiBQcm9wZXJ0eUNvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgUHJvcGVydHlDb2xsZWN0aW9uKFxuICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcHJvcGVydHkuY2F0ZWdvcnkuaWQgPT09IGlkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5ldyBwcm9wZXJ0eSBjb2xsZWN0aW9uIGZpbHRlcmVkIGJ5IGFjdGl2ZSBzdGF0dXNcbiAgICovXG4gIGdldEFjdGl2ZVByb3BlcnRpZXMoKTogUHJvcGVydHlDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFByb3BlcnR5Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuID0+IHByb3BlcnR5LmlzQWN0aXZlKVxuICAgICk7XG4gIH1cblxuICBnZXRDcmVhdGVkUHJvcGVydGllcygpOiBQcm9wZXJ0eUNvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgUHJvcGVydHlDb2xsZWN0aW9uKFxuICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcHJvcGVydHkuaXNPd24oKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBuZXcgcHJvcGVydHkgY29sbGVjdGlvbiBmaWx0ZXJlZCBieSBzaGFyZWRcbiAgICovXG4gIGdldFNoYXJlZFByb3BlcnRpZXMoKTogUHJvcGVydHlDb2xsZWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IFByb3BlcnR5Q29sbGVjdGlvbihcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuID0+ICFwcm9wZXJ0eS5pc093bigpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUHJvcGVydGllcyB0aGF0IGFyZSB0YXhlZCBhbmQgd2lsbCBiZSBpbmNsdWRlZCBpbiByZXBvcnRzIChUYXggc3VtbWFyeSwgTXkgdGF4IHJlcG9ydCwgZS50LmMuKVxuICAgKi9cbiAgZ2V0VGF4SW5jbHVzaXZlKCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHByb3BlcnR5LmNhdGVnb3J5LmlzVGF4SW5jbHVzaXZlKVxuICAgICk7XG4gIH1cblxuICBnZXRVbnNvbGQoKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKFxuICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4gIXByb3BlcnR5LmlzU29sZCgpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRvdGFsIHB1cmNoYXNlIHByaWNlIGZvciBhbGwgcHJvcGVydGllcyBpbiB0aGUgY29sbGVjdGlvblxuICAgKi9cbiAgZ2V0IHB1cmNoYXNlUHJpY2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdW1CeSgncHVyY2hhc2VQcmljZScpO1xuICB9XG5cbiAgZ2V0IGdyb3d0aFBlcmNlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdW1CeSgnZ3Jvd3RoUGVyY2VudCcpO1xuICB9XG5cbiAgZ2V0IG1hcmtldFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VtQnkoJ21hcmtldFZhbHVlJyk7XG4gIH1cblxuICBnZXQgZmlyc3RGb3JlY2FzdFllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKG1pbjogbnVtYmVyLCBwcm9wZXJ0eTogUHJvcGVydHkpOiBudW1iZXIgPT4ge1xuICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gcHJvcGVydHkuZmlyc3RGb3JlY2FzdFllYXI7XG4gICAgICByZXR1cm4gbWluID4gY3VycmVudCA/IGN1cnJlbnQgOiBtaW47XG4gICAgfSwgbmV3IEZpbmFuY2lhbFllYXIoKS55ZWFyKTtcbiAgfVxuXG4gIGdldCBtYXJrZXRWYWx1ZUdyb3d0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5tYXJrZXRWYWx1ZSAtIHRoaXMucHVyY2hhc2VQcmljZSkgLyB0aGlzLnB1cmNoYXNlUHJpY2U7XG4gIH1cblxuICAvKipcbiAgICogbGlzdCBvZiBwcm9wZXJ0aWVzXG4gICAqL1xuICBnZXRDR1RBcHBsaWNhYmxlKCk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZShcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHByb3BlcnR5LmlzQ0dUQXBwbGljYWJsZSgpKVxuICAgICk7XG4gIH1cblxuICBnZXRPd25lck9jY3VwaWVkUHJvcGVydGllcygpOiBQcm9wZXJ0eUNvbGxlY3Rpb24ge1xuICAgIHJldHVybiBuZXcgUHJvcGVydHlDb2xsZWN0aW9uKFxuICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcHJvcGVydHkuY2F0ZWdvcnkuaXNPd25lck9jY3VwaWVkKCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldCBlYXJsaWVzdENvbnRyYWN0RGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKG1pbjogRGF0ZSwgcHJvcGVydHk6IFByb3BlcnR5KTogRGF0ZSA9PiBtaW4gPCBwcm9wZXJ0eS5jb250cmFjdERhdGUgPyBtaW4gOiBwcm9wZXJ0eS5jb250cmFjdERhdGUsIG5ldyBGaW5hbmNpYWxZZWFyKG5ldyBEYXRlKCkpLnN0YXJ0RGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgdW5pcXVlIHByb3BlcnR5IGNhdGVnb3JpZXMgZnJvbSBjb2xsZWN0aW9uXG4gICAqL1xuICBnZXRDYXRlZ29yaWVzKCk6IFByb3BlcnR5Q2F0ZWdvcnlbXSB7XG4gICAgcmV0dXJuIHVuaXFCeSh0aGlzLml0ZW1zLm1hcCgocHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHlDYXRlZ29yeSA9PiBwcm9wZXJ0eS5jYXRlZ29yeSksICdpZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcm9wZXJ0eSB3aXRoIHRoZSBoaWdoZXN0IGdyb3d0aCBwZXJjZW50XG4gICAqL1xuICBnZXRCZXN0UGVyZm9ybWFuY2VHcm93dGhQcm9wZXJ0eSgpOiBQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKChtYXg6IFByb3BlcnR5LCBjdXJyZW50OiBQcm9wZXJ0eSk6IFByb3BlcnR5ID0+IG1heC5ncm93dGhQZXJjZW50IDwgY3VycmVudC5ncm93dGhQZXJjZW50ID8gY3VycmVudCA6IG1heCwgdGhpcy5maXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByb3BlcnR5IHdpdGggdGhlIGxvd2VzdCB0YXggcG9zaXRpb25cbiAgICovXG4gIGdldEJlc3RQZXJmb3JtYW5jZVRheFByb3BlcnR5KHRyYW5zYWN0aW9uczogVHJhbnNhY3Rpb25Db2xsZWN0aW9uLCBkZXByZWNpYXRpb25zOiBEZXByZWNpYXRpb25Db2xsZWN0aW9uKTogUHJvcGVydHkge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uc0J5UHJvcGVydHk6IENvbGxlY3Rpb25EaWN0aW9uYXJ5PFRyYW5zYWN0aW9uQ29sbGVjdGlvbj4gPSB0cmFuc2FjdGlvbnMuZ3JvdXBCeSgncHJvcGVydHkuaWQnKTtcbiAgICBjb25zdCBkZXByZWNpYXRpb25zQnlQcm9wZXJ0eTogQ29sbGVjdGlvbkRpY3Rpb25hcnk8RGVwcmVjaWF0aW9uQ29sbGVjdGlvbj4gPSBkZXByZWNpYXRpb25zLmdyb3VwQnkoJ3Byb3BlcnR5LmlkJyk7XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKG1pbjogUHJvcGVydHksIGN1cnJlbnQ6IFByb3BlcnR5KTogUHJvcGVydHkgPT4ge1xuICAgICAgY29uc3QgbWluVGF4UG9zaXRpb246IG51bWJlciA9IG1pbi5nZXRUYXhQb3NpdGlvbih0cmFuc2FjdGlvbnNCeVByb3BlcnR5LmdldChtaW4uaWQpLCBkZXByZWNpYXRpb25zQnlQcm9wZXJ0eS5nZXQobWluLmlkKSk7XG4gICAgICBjb25zdCBjdXJyZW50VGF4UG9zaXRpb246IG51bWJlciA9IGN1cnJlbnQuZ2V0VGF4UG9zaXRpb24odHJhbnNhY3Rpb25zQnlQcm9wZXJ0eS5nZXQoY3VycmVudC5pZCksIGRlcHJlY2lhdGlvbnNCeVByb3BlcnR5LmdldChjdXJyZW50LmlkKSk7XG5cbiAgICAgIHJldHVybiBtaW5UYXhQb3NpdGlvbiA+IGN1cnJlbnRUYXhQb3NpdGlvbiA/IGN1cnJlbnQgOiBtaW47XG4gICAgfSwgdGhpcy5maXJzdCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBiZXN0IHBlcmZvcm1hbmNlIHByb3BlcnRpZXMgZmlyc3RcbiAgICogaHR0cHM6Ly90YXh0YW5rLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvVEFYVEFOSy9wYWdlcy8yMTc2Nzc5OTcvUHJvcGVydHkrVGFuaytEYXNoYm9hcmRcbiAgICovXG4gIHNvcnRCeUJlc3RQZXJmb3JtYW5jZSh0cmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uQ29sbGVjdGlvbiwgZGVwcmVjaWF0aW9uczogRGVwcmVjaWF0aW9uQ29sbGVjdGlvbik6IHRoaXMge1xuICAgIGNvbnN0IGFjdGl2ZVByb3BlcnRpZXM6IFByb3BlcnR5Q29sbGVjdGlvbiA9IHRoaXMuZ2V0QWN0aXZlUHJvcGVydGllcygpO1xuXG4gICAgLy8gbm90aGluZyB0byBzb3J0IHdoZW4gbm8gYWN0aXZlIHByb3BlcnRpZXNcbiAgICBpZiAoIWFjdGl2ZVByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBiZXN0UHJvcGVydGllczogUHJvcGVydHlbXSA9IHVuaXFCeSh0aGlzLmNyZWF0ZShbXG4gICAgICBhY3RpdmVQcm9wZXJ0aWVzLmdldEJlc3RQZXJmb3JtYW5jZUdyb3d0aFByb3BlcnR5KCksXG4gICAgICBhY3RpdmVQcm9wZXJ0aWVzLmdldEJlc3RQZXJmb3JtYW5jZVRheFByb3BlcnR5KHRyYW5zYWN0aW9ucywgZGVwcmVjaWF0aW9ucylcbiAgICBdKS50b0FycmF5KCksICdpZCcpO1xuXG4gICAgY29uc3QgbmV3SXRlbXM6IFByb3BlcnR5W10gPSB0aGlzLmRpZmYoYmVzdFByb3BlcnRpZXMpLnRvQXJyYXkoKTtcbiAgICBuZXdJdGVtcy51bnNoaWZ0KC4uLmJlc3RQcm9wZXJ0aWVzKTtcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZShuZXdJdGVtcyk7XG4gIH1cblxuICBnZXQgbmV0SW5jb21lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3VtQnkoJ2N1cnJlbnRZZWFyRm9yZWNhc3QuaW5jb21lJykgKyB0aGlzLnN1bUJ5KCdjdXJyZW50WWVhckZvcmVjYXN0LmV4cGVuc2UnKTtcbiAgfVxufVxuIl19
@@ -117,6 +117,9 @@ export class BankAccount extends BankAccountBase {
117
117
  getPropertyBalanceAmount(propertyId) {
118
118
  return this.currentBalance * this.getPropertyPercentage(propertyId);
119
119
  }
120
+ getMonthlyRepaymentAmount(propertyId) {
121
+ return this.loan.monthlyRepaymentAmount * this.getPropertyPercentage(propertyId);
122
+ }
120
123
  /**
121
124
  * Check if bank account is active (has 'active' status or hasn't been paid out/refinanced)
122
125
  */
@@ -166,4 +169,4 @@ __decorate([
166
169
  __decorate([
167
170
  Transform(({ value }) => value === 4 ? BankAccountTypeEnum.LOAN : value)
168
171
  ], BankAccount.prototype, "type", void 0);
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1hY2NvdW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL21vZGVscy9iYW5rL2JhbmstYWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsSUFBSSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBR2pELE1BQU0sT0FBTyxXQUFZLFNBQVEsZUFBZTtJQXNCOUMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLGNBQWMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCO1FBQ25CLE1BQU0sY0FBYyxHQUFXLElBQUksYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUEyQixFQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLGNBQWMsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxVQUFVO1lBQ2pELElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsWUFBWTtZQUM5QyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLElBQUksQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3hCLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQztZQUMvQixLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQztZQUMzQjtnQkFDRSxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEVBQVU7UUFDeEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQXdDLEVBQVcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxVQUFrQjtRQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxVQUFrQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsQ0FBQztTQUNWO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QixDQUFDLFVBQWtCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxNQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQztJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsY0FBc0I7UUFDL0IsTUFBTSx1QkFBdUIsR0FBWSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUM7UUFFbEcsd0lBQXdJO1FBQ3hJLG1EQUFtRDtRQUNuRCxJQUFJLHVCQUF1QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUVELE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBbkxDO0lBREMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDOzBEQUNhO0FBRzdDO0lBREMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDO3dEQUNVO0FBRzdDO0lBREMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDOzZDQUNBO0FBSS9CO0lBREMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzt5Q0FDTjtBQUdYO0lBREMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQzttREFDSTtBQUkvQjtJQURDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3lDQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhbmtBY2NvdW50IGFzIEJhbmtBY2NvdW50QmFzZSB9IGZyb20gJy4uLy4uL2RiL01vZGVscy9iYW5rL2JhbmstYWNjb3VudCc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudFR5cGVFbnVtLCBCYW5rQWNjb3VudFN0YXR1c0VudW0gfSBmcm9tICcuLi8uLi9kYi9FbnVtcyc7XG5pbXBvcnQgeyBMb2FuIH0gZnJvbSAnLi4vbG9hbic7XG5pbXBvcnQgeyBUYW5rVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kYi9FbnVtcy90YW5rLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudEJhbGFuY2UgfSBmcm9tICcuLi8uLi9kYi9Nb2RlbHMnO1xuaW1wb3J0IHsgRmluYW5jaWFsWWVhciB9IGZyb20gJy4uL2ZpbmFuY2lhbC15ZWFyJztcbmltcG9ydCB7IEJhbmtBY2NvdW50UHJvcGVydHkgfSBmcm9tICcuL2JhbmstYWNjb3VudC1wcm9wZXJ0eSc7XG5pbXBvcnQgeyBCYW5rQ29ubmVjdGlvbiB9IGZyb20gJy4vYmFuay1jb25uZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zZm9ybSwgVHlwZSB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IFNvbGVCdXNpbmVzc0FsbG9jYXRpb24gfSBmcm9tICcuLi9zb2xlJztcbmltcG9ydCB7IEJhbmsgfSBmcm9tICcuL2JhbmsnO1xuXG5leHBvcnQgY2xhc3MgQmFua0FjY291bnQgZXh0ZW5kcyBCYW5rQWNjb3VudEJhc2Uge1xuICAvLyBsaXN0IG9mIHByb3BlcnRpZXMgcmVsYXRlZCB3aXRoIHRoaXMgYmFuayBhY2NvdW50XG4gIEBUeXBlKCgpID0+IEJhbmtBY2NvdW50UHJvcGVydHkpXG4gIGJhbmtBY2NvdW50UHJvcGVydGllczogQmFua0FjY291bnRQcm9wZXJ0eVtdO1xuXG4gIEBUeXBlKCgpID0+IFNvbGVCdXNpbmVzc0FsbG9jYXRpb24pXG4gIGJ1c2luZXNzQWxsb2NhdGlvbnM6IFNvbGVCdXNpbmVzc0FsbG9jYXRpb25bXVxuXG4gIEBUeXBlKCgpID0+IEJhbmtBY2NvdW50QmFsYW5jZSlcbiAgYmFsYW5jZXM6IEJhbmtBY2NvdW50QmFsYW5jZVtdO1xuXG4gIC8vIGJhbmsgYWNjb3VudCdzIGxvYW5cbiAgQFR5cGUoKCkgPT4gTG9hbilcbiAgbG9hbjogTG9hbjtcblxuICBAVHlwZSgoKSA9PiBCYW5rQ29ubmVjdGlvbilcbiAgYmFua0Nvbm5lY3Rpb246IEJhbmtDb25uZWN0aW9uO1xuXG4gIC8vIEBUT0RPIEFsZXg6IHRlbXAgaGFjazogcmVtb3ZlIHdoZW4gVFQtMjEwNyByZWFkeS4gQmFja2VuZCBzaG91ZCByZXR1cm4gTW9ydGdhZ2UgdHlwZSBhcyBMb2FuIHR5cGVcbiAgQFRyYW5zZm9ybSgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gNCA/IEJhbmtBY2NvdW50VHlwZUVudW0uTE9BTiA6IHZhbHVlKVxuICB0eXBlOiBCYW5rQWNjb3VudFR5cGVFbnVtO1xuXG4gIGdldCBiYW5rKCk6IEJhbmsge1xuICAgIHJldHVybiB0aGlzLmJhbmtDb25uZWN0aW9uLmJhbms7XG4gIH1cblxuICBnZXQgYnNiKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudE51bWJlci5zbGljZSgwLCA2KTtcbiAgfVxuXG4gIGdldCBudW1iZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TnVtYmVyLnRyaW0oKS5zbGljZSg2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBkaWdpdHMgb2YgYWNjb3VudCBudW1iZXJcbiAgICovXG4gIGdldCBwYXJ0aWFsQWNjb3VudE51bWJlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgeHh4eCR7dGhpcy5hY2NvdW50TnVtYmVyLnNsaWNlKC00KX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IG9wZW5pbmcgYmFsYW5jZSBhbW91bnRcbiAgICovXG4gIGdldE9wZW5pbmdCYWxhbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFllYXJCYWxhbmNlKCk/Lm9wZW5pbmdCYWxhbmNlIHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJhbmsgYWNjb3VudCBiYWxhbmNlIGZvciBjdXJyZW50IGZpbmFuY2lhbCB5ZWFyXG4gICAqL1xuICBnZXRDdXJyZW50WWVhckJhbGFuY2UoKTogQmFua0FjY291bnRCYWxhbmNlIHtcbiAgICBjb25zdCBjdXJyZW50RmluWWVhcjogbnVtYmVyID0gbmV3IEZpbmFuY2lhbFllYXIoKS55ZWFyO1xuICAgIHJldHVybiB0aGlzLmJhbGFuY2VzLmZpbmQoKGJhbGFuY2U6IEJhbmtBY2NvdW50QmFsYW5jZSk6IGJvb2xlYW4gPT4gYmFsYW5jZS5maW5hbmNpYWxZZWFyID09PSBjdXJyZW50RmluWWVhcik7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgYmFuayBhY2NvdW50IHR5cGUgaXMgb25lIG9mIHNhdmluZ3MgYWNjb3VudHNcbiAgICovXG4gIGlzU2F2aW5nc0FjY291bnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQmFua0FjY291bnRUeXBlRW51bS5JTlZFU1RNRU5UIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IEJhbmtBY2NvdW50VHlwZUVudW0uVEVSTV9ERVBPU0lUIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IEJhbmtBY2NvdW50VHlwZUVudW0uU0FWSU5HUztcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBiYW5rIGFjY291bnQgdHlwZSBpcyBMb2FuXG4gICAqL1xuICBpc0xvYW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQmFua0FjY291bnRUeXBlRW51bS5MT0FOO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIGJhbmsgYWNjb3VudCB0eXBlIGlzIENyZWRpdCBjYXJkXG4gICAqL1xuICBpc0NyZWRpdENhcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQmFua0FjY291bnRUeXBlRW51bS5DUkVESVRfQ0FSRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBiYW5rIGFjY291bnQgcmVsYXRlZCB0byB3b3JrIHRhbmtcbiAgICovXG4gIGlzV29ya1RhbmsoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUHJvcGVydHlUYW5rKCkgJiYgIXRoaXMuaXNTb2xlVGFuaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIGJhbmsgYWNjb3VudCByZWxhdGVkIHRvIHdvcmsgdGFua1xuICAgKi9cbiAgaXNQcm9wZXJ0eVRhbmsoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5iYW5rQWNjb3VudFByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIGJhbmsgYWNjb3VudCByZWxhdGVkIHRvIHNvbGUgdGFua1xuICAgKi9cbiAgaXNTb2xlVGFuaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmJ1c2luZXNzQWxsb2NhdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHRhbmtUeXBlKCk6IFRhbmtUeXBlRW51bSB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHRoaXMuaXNQcm9wZXJ0eVRhbmsoKTpcbiAgICAgICAgcmV0dXJuIFRhbmtUeXBlRW51bS5QUk9QRVJUWTtcbiAgICAgIGNhc2UgdGhpcy5pc1NvbGVUYW5rKCk6XG4gICAgICAgIHJldHVybiBUYW5rVHlwZUVudW0uU09MRTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBUYW5rVHlwZUVudW0uV09SSztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEJhbmsgYWNjb3VudCBwcm9wZXJ0eSBieSBpZFxuICAgKiBAcGFyYW0gaWQgSWQgb2YgcHJvcGVydHlcbiAgICovXG4gIGdldFByb3BlcnR5QnlJZChpZDogbnVtYmVyKTogQmFua0FjY291bnRQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMuYmFua0FjY291bnRQcm9wZXJ0aWVzLmZpbmQoKGJhbmtBY2NvdW50UHJvcGVydHk6IEJhbmtBY2NvdW50UHJvcGVydHkpOiBib29sZWFuID0+IGJhbmtBY2NvdW50UHJvcGVydHkucHJvcGVydHkuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBiYW5rIGFjY291bnQgaXMgcmVsYXRlZCB3aXRoIHBhc3NlZCBwcm9wZXJ0eSBieSBpZFxuICAgKiBAcGFyYW0gcHJvcGVydHlJZCBQcm9wZXJ0eSBpZCBmb3IgY2hlY2tpbmdcbiAgICovXG4gIGhhc1Byb3BlcnR5KHByb3BlcnR5SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0UHJvcGVydHlCeUlkKHByb3BlcnR5SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWNpbWFsIHBlcmNlbnRhZ2UgZm9yIHByb3BlcnR5XG4gICAqIEBwYXJhbSBwcm9wZXJ0eUlkIElkIG9mIHByb3BlcnR5XG4gICAqL1xuICBnZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHlJZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaGFzUHJvcGVydHkocHJvcGVydHlJZCkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5QnlJZChwcm9wZXJ0eUlkKS5wZXJjZW50IC8gMTAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBiYWxhbmNlIGFtb3VudCBmb3IgcHJvcGVydHkgYnkgaWRcbiAgICogQHBhcmFtIHByb3BlcnR5SWQgSWQgb2YgcHJvcGVydHlcbiAgICovXG4gIGdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eUlkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCYWxhbmNlICogdGhpcy5nZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHlJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYmFuayBhY2NvdW50IGlzIGFjdGl2ZSAoaGFzICdhY3RpdmUnIHN0YXR1cyBvciBoYXNuJ3QgYmVlbiBwYWlkIG91dC9yZWZpbmFuY2VkKVxuICAgKi9cbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBCYW5rQWNjb3VudFN0YXR1c0VudW0uQUNUSVZFO1xuICB9XG5cbiAgLyoqXG4gICAqIGZpcnN0IGltcG9ydCAodHJhbnNhY3Rpb25zKSBvZiBiYXNpcSBhY2NvdW50c1xuICAgKi9cbiAgaXNGaXJzdEltcG9ydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubGFzdFRyYW5zYWN0aW9uRGF0ZSAmJiAhdGhpcy5pc01hbnVhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYXNzZWQgdXNlciBpZCBpcyBvd25lciBvZiBiYW5rIGFjY291bnRcbiAgICovXG4gIGlzT3duZXIodXNlcklkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5iYW5rQ29ubmVjdGlvbi51c2VyLmlkID09PSB1c2VySWQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hbiBpcyBwYWlkIGlmIGl0IGhhcyBubyB1bmFsbG9jYXRlZCB0cmFuc2FjdGlvbnMgYW5kIHRoZSBiYW5rIGJhbGFuY2UgaXMgJDAuXG4gICAqL1xuICBpc0xvYW5QYWlkKHRheFRhbmtCYWxhbmNlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaG91bGRQYXlvdXRMb2FuQWNjb3VudDogYm9vbGVhbiA9IHRoaXMuaXNBY3RpdmUoKSAmJiB0aGlzLmlzTG9hbigpICYmIHRheFRhbmtCYWxhbmNlID09PSAwO1xuXG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgY3VycmVudCBiYWxhbmNlIGZvciBiYXNpcSBhY2NvdW50cywgYmVjYXVzZSBiYXNpcSBkb2Vzbid0IHByb3ZpZGUgdXMgbGFzdCB0cmFuc2FjdGlvbnMgKGNhbid0IGRvIGZvciBjbG9zZWQgYWNjb3VudHMpLFxuICAgIC8vIHRoYXQncyB3aHkgYmFsYW5jZSB3b24ndCBiZSAwICh1cGRhdGVkIGJ5IGJhc2lxKVxuICAgIGlmIChzaG91bGRQYXlvdXRMb2FuQWNjb3VudCAmJiB0aGlzLmlzTWFudWFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50QmFsYW5jZSA9PT0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkUGF5b3V0TG9hbkFjY291bnQ7XG4gIH1cbn1cbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFuay1hY2NvdW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL21vZGVscy9iYW5rL2JhbmstYWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFdBQVcsSUFBSSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBR2pELE1BQU0sT0FBTyxXQUFZLFNBQVEsZUFBZTtJQXNCOUMsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENB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RUFBRSxDQUFDLGNBQWMsQ0FBQzttREFDSTtBQUkvQjtJQURDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3lDQUMvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhbmtBY2NvdW50IGFzIEJhbmtBY2NvdW50QmFzZSB9IGZyb20gJy4uLy4uL2RiL01vZGVscy9iYW5rL2JhbmstYWNjb3VudCc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudFR5cGVFbnVtLCBCYW5rQWNjb3VudFN0YXR1c0VudW0gfSBmcm9tICcuLi8uLi9kYi9FbnVtcyc7XG5pbXBvcnQgeyBMb2FuIH0gZnJvbSAnLi4vbG9hbic7XG5pbXBvcnQgeyBUYW5rVHlwZUVudW0gfSBmcm9tICcuLi8uLi9kYi9FbnVtcy90YW5rLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBCYW5rQWNjb3VudEJhbGFuY2UgfSBmcm9tICcuLi8uLi9kYi9Nb2RlbHMnO1xuaW1wb3J0IHsgRmluYW5jaWFsWWVhciB9IGZyb20gJy4uL2ZpbmFuY2lhbC15ZWFyJztcbmltcG9ydCB7IEJhbmtBY2NvdW50UHJvcGVydHkgfSBmcm9tICcuL2JhbmstYWNjb3VudC1wcm9wZXJ0eSc7XG5pbXBvcnQgeyBCYW5rQ29ubmVjdGlvbiB9IGZyb20gJy4vYmFuay1jb25uZWN0aW9uJztcbmltcG9ydCB7IFRyYW5zZm9ybSwgVHlwZSB9IGZyb20gJ2NsYXNzLXRyYW5zZm9ybWVyJztcbmltcG9ydCB7IFNvbGVCdXNpbmVzc0FsbG9jYXRpb24gfSBmcm9tICcuLi9zb2xlJztcbmltcG9ydCB7IEJhbmsgfSBmcm9tICcuL2JhbmsnO1xuXG5leHBvcnQgY2xhc3MgQmFua0FjY291bnQgZXh0ZW5kcyBCYW5rQWNjb3VudEJhc2Uge1xuICAvLyBsaXN0IG9mIHByb3BlcnRpZXMgcmVsYXRlZCB3aXRoIHRoaXMgYmFuayBhY2NvdW50XG4gIEBUeXBlKCgpID0+IEJhbmtBY2NvdW50UHJvcGVydHkpXG4gIGJhbmtBY2NvdW50UHJvcGVydGllczogQmFua0FjY291bnRQcm9wZXJ0eVtdO1xuXG4gIEBUeXBlKCgpID0+IFNvbGVCdXNpbmVzc0FsbG9jYXRpb24pXG4gIGJ1c2luZXNzQWxsb2NhdGlvbnM6IFNvbGVCdXNpbmVzc0FsbG9jYXRpb25bXVxuXG4gIEBUeXBlKCgpID0+IEJhbmtBY2NvdW50QmFsYW5jZSlcbiAgYmFsYW5jZXM6IEJhbmtBY2NvdW50QmFsYW5jZVtdO1xuXG4gIC8vIGJhbmsgYWNjb3VudCdzIGxvYW5cbiAgQFR5cGUoKCkgPT4gTG9hbilcbiAgbG9hbjogTG9hbjtcblxuICBAVHlwZSgoKSA9PiBCYW5rQ29ubmVjdGlvbilcbiAgYmFua0Nvbm5lY3Rpb246IEJhbmtDb25uZWN0aW9uO1xuXG4gIC8vIEBUT0RPIEFsZXg6IHRlbXAgaGFjazogcmVtb3ZlIHdoZW4gVFQtMjEwNyByZWFkeS4gQmFja2VuZCBzaG91ZCByZXR1cm4gTW9ydGdhZ2UgdHlwZSBhcyBMb2FuIHR5cGVcbiAgQFRyYW5zZm9ybSgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gNCA/IEJhbmtBY2NvdW50VHlwZUVudW0uTE9BTiA6IHZhbHVlKVxuICB0eXBlOiBCYW5rQWNjb3VudFR5cGVFbnVtO1xuXG4gIGdldCBiYW5rKCk6IEJhbmsge1xuICAgIHJldHVybiB0aGlzLmJhbmtDb25uZWN0aW9uLmJhbms7XG4gIH1cblxuICBnZXQgYnNiKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudE51bWJlci5zbGljZSgwLCA2KTtcbiAgfVxuXG4gIGdldCBudW1iZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TnVtYmVyLnRyaW0oKS5zbGljZSg2KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCBkaWdpdHMgb2YgYWNjb3VudCBudW1iZXJcbiAgICovXG4gIGdldCBwYXJ0aWFsQWNjb3VudE51bWJlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgeHh4eCR7dGhpcy5hY2NvdW50TnVtYmVyLnNsaWNlKC00KX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IG9wZW5pbmcgYmFsYW5jZSBhbW91bnRcbiAgICovXG4gIGdldE9wZW5pbmdCYWxhbmNlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFllYXJCYWxhbmNlKCk/Lm9wZW5pbmdCYWxhbmNlIHx8IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGJhbmsgYWNjb3VudCBiYWxhbmNlIGZvciBjdXJyZW50IGZpbmFuY2lhbCB5ZWFyXG4gICAqL1xuICBnZXRDdXJyZW50WWVhckJhbGFuY2UoKTogQmFua0FjY291bnRCYWxhbmNlIHtcbiAgICBjb25zdCBjdXJyZW50RmluWWVhcjogbnVtYmVyID0gbmV3IEZpbmFuY2lhbFllYXIoKS55ZWFyO1xuICAgIHJldHVybiB0aGlzLmJhbGFuY2VzLmZpbmQoKGJhbGFuY2U6IEJhbmtBY2NvdW50QmFsYW5jZSk6IGJvb2xlYW4gPT4gYmFsYW5jZS5maW5hbmNpYWxZZWFyID09PSBjdXJyZW50RmluWWVhcik7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2sgaWYgYmFuayBhY2NvdW50IHR5cGUgaXMgb25lIG9mIHNhdmluZ3MgYWNjb3VudHNcbiAgICovXG4gIGlzU2F2aW5nc0FjY291bnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQmFua0FjY291bnRUeXBlRW51bS5JTlZFU1RNRU5UIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IEJhbmtBY2NvdW50VHlwZUVudW0uVEVSTV9ERVBPU0lUIHx8XG4gICAgICB0aGlzLnR5cGUgPT09IEJhbmtBY2NvdW50VHlwZUVudW0uU0FWSU5HUztcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBiYW5rIGFjY291bnQgdHlwZSBpcyBMb2FuXG4gICAqL1xuICBpc0xvYW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQmFua0FjY291bnRUeXBlRW51bS5MT0FOO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIGJhbmsgYWNjb3VudCB0eXBlIGlzIENyZWRpdCBjYXJkXG4gICAqL1xuICBpc0NyZWRpdENhcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQmFua0FjY291bnRUeXBlRW51bS5DUkVESVRfQ0FSRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBiYW5rIGFjY291bnQgcmVsYXRlZCB0byB3b3JrIHRhbmtcbiAgICovXG4gIGlzV29ya1RhbmsoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUHJvcGVydHlUYW5rKCkgJiYgIXRoaXMuaXNTb2xlVGFuaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIGJhbmsgYWNjb3VudCByZWxhdGVkIHRvIHdvcmsgdGFua1xuICAgKi9cbiAgaXNQcm9wZXJ0eVRhbmsoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5iYW5rQWNjb3VudFByb3BlcnRpZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrIGlmIGJhbmsgYWNjb3VudCByZWxhdGVkIHRvIHNvbGUgdGFua1xuICAgKi9cbiAgaXNTb2xlVGFuaygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmJ1c2luZXNzQWxsb2NhdGlvbnMubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHRhbmtUeXBlKCk6IFRhbmtUeXBlRW51bSB7XG4gICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIHRoaXMuaXNQcm9wZXJ0eVRhbmsoKTpcbiAgICAgICAgcmV0dXJuIFRhbmtUeXBlRW51bS5QUk9QRVJUWTtcbiAgICAgIGNhc2UgdGhpcy5pc1NvbGVUYW5rKCk6XG4gICAgICAgIHJldHVybiBUYW5rVHlwZUVudW0uU09MRTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBUYW5rVHlwZUVudW0uV09SSztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IEJhbmsgYWNjb3VudCBwcm9wZXJ0eSBieSBpZFxuICAgKiBAcGFyYW0gaWQgSWQgb2YgcHJvcGVydHlcbiAgICovXG4gIGdldFByb3BlcnR5QnlJZChpZDogbnVtYmVyKTogQmFua0FjY291bnRQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMuYmFua0FjY291bnRQcm9wZXJ0aWVzLmZpbmQoKGJhbmtBY2NvdW50UHJvcGVydHk6IEJhbmtBY2NvdW50UHJvcGVydHkpOiBib29sZWFuID0+IGJhbmtBY2NvdW50UHJvcGVydHkucHJvcGVydHkuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBpZiBiYW5rIGFjY291bnQgaXMgcmVsYXRlZCB3aXRoIHBhc3NlZCBwcm9wZXJ0eSBieSBpZFxuICAgKiBAcGFyYW0gcHJvcGVydHlJZCBQcm9wZXJ0eSBpZCBmb3IgY2hlY2tpbmdcbiAgICovXG4gIGhhc1Byb3BlcnR5KHByb3BlcnR5SWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0UHJvcGVydHlCeUlkKHByb3BlcnR5SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWNpbWFsIHBlcmNlbnRhZ2UgZm9yIHByb3BlcnR5XG4gICAqIEBwYXJhbSBwcm9wZXJ0eUlkIElkIG9mIHByb3BlcnR5XG4gICAqL1xuICBnZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHlJZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaGFzUHJvcGVydHkocHJvcGVydHlJZCkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5QnlJZChwcm9wZXJ0eUlkKS5wZXJjZW50IC8gMTAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBiYWxhbmNlIGFtb3VudCBmb3IgcHJvcGVydHkgYnkgaWRcbiAgICogQHBhcmFtIHByb3BlcnR5SWQgSWQgb2YgcHJvcGVydHlcbiAgICovXG4gIGdldFByb3BlcnR5QmFsYW5jZUFtb3VudChwcm9wZXJ0eUlkOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCYWxhbmNlICogdGhpcy5nZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHlJZCk7XG4gIH1cblxuICBnZXRNb250aGx5UmVwYXltZW50QW1vdW50KHByb3BlcnR5SWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubG9hbi5tb250aGx5UmVwYXltZW50QW1vdW50ICogdGhpcy5nZXRQcm9wZXJ0eVBlcmNlbnRhZ2UocHJvcGVydHlJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYmFuayBhY2NvdW50IGlzIGFjdGl2ZSAoaGFzICdhY3RpdmUnIHN0YXR1cyBvciBoYXNuJ3QgYmVlbiBwYWlkIG91dC9yZWZpbmFuY2VkKVxuICAgKi9cbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBCYW5rQWNjb3VudFN0YXR1c0VudW0uQUNUSVZFO1xuICB9XG5cbiAgLyoqXG4gICAqIGZpcnN0IGltcG9ydCAodHJhbnNhY3Rpb25zKSBvZiBiYXNpcSBhY2NvdW50c1xuICAgKi9cbiAgaXNGaXJzdEltcG9ydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubGFzdFRyYW5zYWN0aW9uRGF0ZSAmJiAhdGhpcy5pc01hbnVhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYXNzZWQgdXNlciBpZCBpcyBvd25lciBvZiBiYW5rIGFjY291bnRcbiAgICovXG4gIGlzT3duZXIodXNlcklkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5iYW5rQ29ubmVjdGlvbi51c2VyLmlkID09PSB1c2VySWQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hbiBpcyBwYWlkIGlmIGl0IGhhcyBubyB1bmFsbG9jYXRlZCB0cmFuc2FjdGlvbnMgYW5kIHRoZSBiYW5rIGJhbGFuY2UgaXMgJDAuXG4gICAqL1xuICBpc0xvYW5QYWlkKHRheFRhbmtCYWxhbmNlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaG91bGRQYXlvdXRMb2FuQWNjb3VudDogYm9vbGVhbiA9IHRoaXMuaXNBY3RpdmUoKSAmJiB0aGlzLmlzTG9hbigpICYmIHRheFRhbmtCYWxhbmNlID09PSAwO1xuXG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgY3VycmVudCBiYWxhbmNlIGZvciBiYXNpcSBhY2NvdW50cywgYmVjYXVzZSBiYXNpcSBkb2Vzbid0IHByb3ZpZGUgdXMgbGFzdCB0cmFuc2FjdGlvbnMgKGNhbid0IGRvIGZvciBjbG9zZWQgYWNjb3VudHMpLFxuICAgIC8vIHRoYXQncyB3aHkgYmFsYW5jZSB3b24ndCBiZSAwICh1cGRhdGVkIGJ5IGJhc2lxKVxuICAgIGlmIChzaG91bGRQYXlvdXRMb2FuQWNjb3VudCAmJiB0aGlzLmlzTWFudWFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50QmFsYW5jZSA9PT0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2hvdWxkUGF5b3V0TG9hbkFjY291bnQ7XG4gIH1cbn1cbiJdfQ==
@@ -2,6 +2,13 @@ import { __decorate } from "tslib";
2
2
  import { BorrowingReport as BorrowingReportBase } from '../../db/Models/property/borrowing-report';
3
3
  import { Type } from 'class-transformer';
4
4
  import { User } from '../user';
5
+ import { plainToClass } from 'class-transformer';
6
+ import { Collection, IncomeSourceForecastCollection } from '../../collections';
7
+ import { AnnualClientDetails } from '../client';
8
+ /**
9
+ * Borrowing power report, shows if u can afford new property loan
10
+ * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4717608961/Borrowing+Power+Report+-+Property+Tank
11
+ */
5
12
  export class BorrowingReport extends BorrowingReportBase {
6
13
  constructor() {
7
14
  super(...arguments);
@@ -10,8 +17,35 @@ export class BorrowingReport extends BorrowingReportBase {
10
17
  this.otherLiabilities = 0;
11
18
  this.livingExpenses = 0;
12
19
  }
20
+ /**
21
+ * some fields calculated automatically until user filled them manually
22
+ */
23
+ static calculate(salaryForecasts, incomeSourceForecasts, clientDetails = plainToClass(AnnualClientDetails, {}), report = plainToClass(BorrowingReport, {})) {
24
+ if (!report.netSalary) {
25
+ report.netSalary = new Collection(salaryForecasts).sumBy('monthlyAmount')
26
+ + new IncomeSourceForecastCollection(incomeSourceForecasts).bonuses.sumBy('monthlyAmount');
27
+ }
28
+ if (!report.spouseNetSalary) {
29
+ report.spouseNetSalary = clientDetails.spouseMonthlyIncome;
30
+ }
31
+ return report;
32
+ }
33
+ /**
34
+ * free money after expenses
35
+ */
36
+ getNetIncomeSurplus(profit, repaymentAmount) {
37
+ return profit + this.netRentIncome + this.netSalary + this.spouseNetSalary - repaymentAmount
38
+ - this.loanRepaymentAmount - this.otherLiabilities - this.livingExpenses;
39
+ }
40
+ /**
41
+ * surplus income to cover your debt obligations
42
+ */
43
+ getNetSurplusRatio(profit, repaymentAmount) {
44
+ return (profit + this.netRentIncome + this.netSalary + this.spouseNetSalary - this.livingExpenses)
45
+ / (repaymentAmount + this.loanRepaymentAmount + this.otherLiabilities);
46
+ }
13
47
  }
14
48
  __decorate([
15
49
  Type(() => User)
16
50
  ], BorrowingReport.prototype, "user", void 0);
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93aW5nLXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9tb2RlbHMvcHJvcGVydHkvYm9ycm93aW5nLXJlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGVBQWUsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxJQUFJLEVBQWEsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRS9CLE1BQU0sT0FBTyxlQUFnQixTQUFRLG1CQUFtQjtJQUF4RDs7UUFJRSxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQix3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FBQTtBQU5DO0lBREMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzs2Q0FDTiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvcnJvd2luZ1JlcG9ydCBhcyBCb3Jyb3dpbmdSZXBvcnRCYXNlIH0gZnJvbSAnLi4vLi4vZGIvTW9kZWxzL3Byb3BlcnR5L2JvcnJvd2luZy1yZXBvcnQnO1xuaW1wb3J0IHsgVHlwZSwgVHJhbnNmb3JtIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL3VzZXInO1xuXG5leHBvcnQgY2xhc3MgQm9ycm93aW5nUmVwb3J0IGV4dGVuZHMgQm9ycm93aW5nUmVwb3J0QmFzZSB7XG4gIEBUeXBlKCgpID0+IFVzZXIpXG4gIHVzZXI6IFVzZXI7XG5cbiAgbmV0UmVudEluY29tZTogbnVtYmVyID0gMDtcbiAgbG9hblJlcGF5bWVudEFtb3VudDogbnVtYmVyID0gMDtcbiAgb3RoZXJMaWFiaWxpdGllczogbnVtYmVyID0gMDtcbiAgbGl2aW5nRXhwZW5zZXM6IG51bWJlciA9IDA7XG59XG4iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93aW5nLXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9tb2RlbHMvcHJvcGVydHkvYm9ycm93aW5nLXJlcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGVBQWUsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLDhCQUE4QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR2hEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLG1CQUFtQjtJQUF4RDs7UUFJRSxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQix3QkFBbUIsR0FBVyxDQUFDLENBQUM7UUFDaEMscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO0lBcUM3QixDQUFDO0lBbkNDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FDZCxlQUFpQyxFQUNqQyxxQkFBNkMsRUFDN0MsZ0JBQXFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsRUFDMUUsU0FBMEIsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7UUFFM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDckIsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO2tCQUNyRSxJQUFJLDhCQUE4QixDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM5RjtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDO1NBQzVEO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsTUFBYyxFQUFFLGVBQXVCO1FBQ3pELE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWU7Y0FDeEYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFBO0lBQzVFLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLE1BQWMsRUFBRSxlQUF1QjtRQUN4RCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7Y0FDOUYsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzFFLENBQUM7Q0FDRjtBQTFDQztJQURDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7NkNBQ04iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCb3Jyb3dpbmdSZXBvcnQgYXMgQm9ycm93aW5nUmVwb3J0QmFzZSB9IGZyb20gJy4uLy4uL2RiL01vZGVscy9wcm9wZXJ0eS9ib3Jyb3dpbmctcmVwb3J0JztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vdXNlcic7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBDb2xsZWN0aW9uLCBJbmNvbWVTb3VyY2VGb3JlY2FzdENvbGxlY3Rpb24gfSBmcm9tICcuLi8uLi9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBBbm51YWxDbGllbnREZXRhaWxzIH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IEluY29tZVNvdXJjZUZvcmVjYXN0LCBTYWxhcnlGb3JlY2FzdCB9IGZyb20gJy4uL2luY29tZS1zb3VyY2UnO1xuXG4vKipcbiAqIEJvcnJvd2luZyBwb3dlciByZXBvcnQsIHNob3dzIGlmIHUgY2FuIGFmZm9yZCBuZXcgcHJvcGVydHkgbG9hblxuICogaHR0cHM6Ly90YXh0YW5rLmF0bGFzc2lhbi5uZXQvd2lraS9zcGFjZXMvVEFYVEFOSy9wYWdlcy80NzE3NjA4OTYxL0JvcnJvd2luZytQb3dlcitSZXBvcnQrLStQcm9wZXJ0eStUYW5rXG4gKi9cbmV4cG9ydCBjbGFzcyBCb3Jyb3dpbmdSZXBvcnQgZXh0ZW5kcyBCb3Jyb3dpbmdSZXBvcnRCYXNlIHtcbiAgQFR5cGUoKCkgPT4gVXNlcilcbiAgdXNlcjogVXNlcjtcblxuICBuZXRSZW50SW5jb21lOiBudW1iZXIgPSAwO1xuICBsb2FuUmVwYXltZW50QW1vdW50OiBudW1iZXIgPSAwO1xuICBvdGhlckxpYWJpbGl0aWVzOiBudW1iZXIgPSAwO1xuICBsaXZpbmdFeHBlbnNlczogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogc29tZSBmaWVsZHMgY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IHVudGlsIHVzZXIgZmlsbGVkIHRoZW0gbWFudWFsbHlcbiAgICovXG4gIHN0YXRpYyBjYWxjdWxhdGUoXG4gICAgc2FsYXJ5Rm9yZWNhc3RzOiBTYWxhcnlGb3JlY2FzdFtdLFxuICAgIGluY29tZVNvdXJjZUZvcmVjYXN0czogSW5jb21lU291cmNlRm9yZWNhc3RbXSxcbiAgICBjbGllbnREZXRhaWxzOiBBbm51YWxDbGllbnREZXRhaWxzID0gcGxhaW5Ub0NsYXNzKEFubnVhbENsaWVudERldGFpbHMsIHt9KSxcbiAgICByZXBvcnQ6IEJvcnJvd2luZ1JlcG9ydCA9IHBsYWluVG9DbGFzcyhCb3Jyb3dpbmdSZXBvcnQsIHt9KVxuICApOiBCb3Jyb3dpbmdSZXBvcnQge1xuICAgIGlmICghcmVwb3J0Lm5ldFNhbGFyeSkge1xuICAgICAgcmVwb3J0Lm5ldFNhbGFyeSA9IG5ldyBDb2xsZWN0aW9uKHNhbGFyeUZvcmVjYXN0cykuc3VtQnkoJ21vbnRobHlBbW91bnQnKVxuICAgICAgICArIG5ldyBJbmNvbWVTb3VyY2VGb3JlY2FzdENvbGxlY3Rpb24oaW5jb21lU291cmNlRm9yZWNhc3RzKS5ib251c2VzLnN1bUJ5KCdtb250aGx5QW1vdW50Jyk7XG4gICAgfVxuICAgIGlmICghcmVwb3J0LnNwb3VzZU5ldFNhbGFyeSkge1xuICAgICAgcmVwb3J0LnNwb3VzZU5ldFNhbGFyeSA9IGNsaWVudERldGFpbHMuc3BvdXNlTW9udGhseUluY29tZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVwb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIGZyZWUgbW9uZXkgYWZ0ZXIgZXhwZW5zZXNcbiAgICovXG4gIGdldE5ldEluY29tZVN1cnBsdXMocHJvZml0OiBudW1iZXIsIHJlcGF5bWVudEFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcHJvZml0ICsgdGhpcy5uZXRSZW50SW5jb21lICsgdGhpcy5uZXRTYWxhcnkgKyB0aGlzLnNwb3VzZU5ldFNhbGFyeSAtIHJlcGF5bWVudEFtb3VudFxuICAgICAgLSB0aGlzLmxvYW5SZXBheW1lbnRBbW91bnQgLSB0aGlzLm90aGVyTGlhYmlsaXRpZXMgLSB0aGlzLmxpdmluZ0V4cGVuc2VzXG4gIH1cblxuICAvKipcbiAgICogc3VycGx1cyBpbmNvbWUgdG8gY292ZXIgeW91ciBkZWJ0IG9ibGlnYXRpb25zXG4gICAqL1xuICBnZXROZXRTdXJwbHVzUmF0aW8ocHJvZml0OiBudW1iZXIsIHJlcGF5bWVudEFtb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHByb2ZpdCArIHRoaXMubmV0UmVudEluY29tZSArIHRoaXMubmV0U2FsYXJ5ICsgdGhpcy5zcG91c2VOZXRTYWxhcnkgLSB0aGlzLmxpdmluZ0V4cGVuc2VzKVxuICAgICAgLyAocmVwYXltZW50QW1vdW50ICsgdGhpcy5sb2FuUmVwYXltZW50QW1vdW50ICsgdGhpcy5vdGhlckxpYWJpbGl0aWVzKVxuICB9XG59XG4iXX0=
@@ -14,10 +14,10 @@ import round from 'lodash/round';
14
14
  import flatten from 'lodash/flatten';
15
15
  import hasIn from 'lodash/hasIn';
16
16
  import intersection from 'lodash/intersection';
17
+ import uniqBy from 'lodash/uniqBy';
17
18
  import first from 'lodash/first';
18
19
  import last from 'lodash/last';
19
20
  import orderBy from 'lodash/orderBy';
20
- import uniqBy from 'lodash/uniqBy';
21
21
  import differenceBy from 'lodash/differenceBy';
22
22
  import uniq from 'lodash/uniq';
23
23
  import moment from 'moment';
@@ -1649,13 +1649,13 @@ class CollectionDictionary {
1649
1649
  return this.items[key] ? this.items[key] : this.createCollection([]);
1650
1650
  }
1651
1651
  /**
1652
- * Join several collections by ids
1652
+ * Join several collections by ids, return collection of uniq models (skip duplicates)
1653
1653
  */
1654
1654
  merge(keys) {
1655
1655
  if (!this.length) {
1656
1656
  return this.createCollection([]);
1657
1657
  }
1658
- return this.createCollection(flatten(keys.map((key) => this.get(key.toString()).items)));
1658
+ return this.createCollection(uniqBy(flatten(keys.map((key) => this.get(key.toString()).items)), 'id'));
1659
1659
  }
1660
1660
  /**
1661
1661
  * Create instance of collection
@@ -2187,6 +2187,9 @@ class PropertyCollection extends Collection {
2187
2187
  newItems.unshift(...bestProperties);
2188
2188
  return this.create(newItems);
2189
2189
  }
2190
+ get netIncome() {
2191
+ return this.sumBy('currentYearForecast.income') + this.sumBy('currentYearForecast.expense');
2192
+ }
2190
2193
  }
2191
2194
 
2192
2195
  class PropertyCategoryMovementCollection extends Collection {
@@ -5977,6 +5980,10 @@ __decorate([
5977
5980
  let BorrowingReport$1 = class BorrowingReport extends AbstractModel {
5978
5981
  };
5979
5982
 
5983
+ /**
5984
+ * Borrowing power report, shows if u can afford new property loan
5985
+ * https://taxtank.atlassian.net/wiki/spaces/TAXTANK/pages/4717608961/Borrowing+Power+Report+-+Property+Tank
5986
+ */
5980
5987
  class BorrowingReport extends BorrowingReport$1 {
5981
5988
  constructor() {
5982
5989
  super(...arguments);
@@ -5985,6 +5992,33 @@ class BorrowingReport extends BorrowingReport$1 {
5985
5992
  this.otherLiabilities = 0;
5986
5993
  this.livingExpenses = 0;
5987
5994
  }
5995
+ /**
5996
+ * some fields calculated automatically until user filled them manually
5997
+ */
5998
+ static calculate(salaryForecasts, incomeSourceForecasts, clientDetails = plainToClass(AnnualClientDetails, {}), report = plainToClass(BorrowingReport, {})) {
5999
+ if (!report.netSalary) {
6000
+ report.netSalary = new Collection(salaryForecasts).sumBy('monthlyAmount')
6001
+ + new IncomeSourceForecastCollection(incomeSourceForecasts).bonuses.sumBy('monthlyAmount');
6002
+ }
6003
+ if (!report.spouseNetSalary) {
6004
+ report.spouseNetSalary = clientDetails.spouseMonthlyIncome;
6005
+ }
6006
+ return report;
6007
+ }
6008
+ /**
6009
+ * free money after expenses
6010
+ */
6011
+ getNetIncomeSurplus(profit, repaymentAmount) {
6012
+ return profit + this.netRentIncome + this.netSalary + this.spouseNetSalary - repaymentAmount
6013
+ - this.loanRepaymentAmount - this.otherLiabilities - this.livingExpenses;
6014
+ }
6015
+ /**
6016
+ * surplus income to cover your debt obligations
6017
+ */
6018
+ getNetSurplusRatio(profit, repaymentAmount) {
6019
+ return (profit + this.netRentIncome + this.netSalary + this.spouseNetSalary - this.livingExpenses)
6020
+ / (repaymentAmount + this.loanRepaymentAmount + this.otherLiabilities);
6021
+ }
5988
6022
  }
5989
6023
  __decorate([
5990
6024
  Type(() => User)
@@ -7797,8 +7831,26 @@ class BankAccountCollection extends Collection {
7797
7831
  getPropertyBalanceAmount(propertyId) {
7798
7832
  return this.items.reduce((sum, bankAccount) => sum + bankAccount.getPropertyBalanceAmount(propertyId), 0);
7799
7833
  }
7800
- getMonthlyRepaymentAmount(propertyId) {
7801
- return this.getLoanAccounts().reduce((sum, bankAccount) => sum + bankAccount.loan.monthlyRepaymentAmount * bankAccount.getPropertyPercentage(propertyId), 0);
7834
+ get propertiesBalanceAmount() {
7835
+ let balanceAmount = 0;
7836
+ this.items.forEach((bankAccount) => {
7837
+ bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {
7838
+ balanceAmount += Math.abs(bankAccount.getPropertyBalanceAmount(bankAccountProperty.property.id));
7839
+ });
7840
+ });
7841
+ return balanceAmount;
7842
+ }
7843
+ get propertiesMonthlyRepaymentAmount() {
7844
+ let repaymentAmount = 0;
7845
+ this.getLoanAccounts().items.forEach((bankAccount) => {
7846
+ bankAccount.bankAccountProperties.forEach((bankAccountProperty) => {
7847
+ repaymentAmount += bankAccount.getMonthlyRepaymentAmount(bankAccountProperty.property.id);
7848
+ });
7849
+ });
7850
+ return repaymentAmount;
7851
+ }
7852
+ getPropertyMonthlyRepaymentAmount(propertyId) {
7853
+ return this.getLoanAccounts().reduce((sum, bankAccount) => sum + bankAccount.getMonthlyRepaymentAmount(propertyId), 0);
7802
7854
  }
7803
7855
  getLVR(property) {
7804
7856
  return this.getPropertyBalanceAmount(property.id) / property.currentYearForecast.marketValue;
@@ -7807,6 +7859,9 @@ class BankAccountCollection extends Collection {
7807
7859
  // TODO Alex/Vik: maybe we should get it from jwtToken or think about some localStorageService?
7808
7860
  return this.filter((bankAccount) => bankAccount.isOwner(+localStorage.getItem('userId')));
7809
7861
  }
7862
+ getActiveLoanAccountsByProperties(ids) {
7863
+ return this.getActiveBankAccounts().getLoanAccounts().getByPropertiesIds(ids);
7864
+ }
7810
7865
  }
7811
7866
 
7812
7867
  /**
@@ -8593,6 +8648,9 @@ class BankAccount extends BankAccount$1 {
8593
8648
  getPropertyBalanceAmount(propertyId) {
8594
8649
  return this.currentBalance * this.getPropertyPercentage(propertyId);
8595
8650
  }
8651
+ getMonthlyRepaymentAmount(propertyId) {
8652
+ return this.loan.monthlyRepaymentAmount * this.getPropertyPercentage(propertyId);
8653
+ }
8596
8654
  /**
8597
8655
  * Check if bank account is active (has 'active' status or hasn't been paid out/refinanced)
8598
8656
  */