@colijnit/homedecorator 255.1.2 → 255.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/core/model/homedecorator-settings-options.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +1 -1
- package/app/core/service/utils.service.d.ts +1 -0
- package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
- package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
- package/app/plugins/core3d/items/metadata.d.ts +2 -0
- package/app/plugins/core3d/service/ar.service.d.ts +1 -0
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
- package/app/plugins/core3d/service/outline.service.d.ts +1 -2
- package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
- package/app/plugins/core3d/service/scene.service.d.ts +4 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +18 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
- package/app/plugins/render/service/new-render.service.d.ts +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
- package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
- package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
- package/app/shared/pdf-export/pdf-export.component.scss +19 -0
- package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/xmark_regular.svg +1 -0
- package/bundles/colijnit-homedecorator.umd.js +1195 -174
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/colijnit-homedecorator-255.1.2.tgz +0 -0
- package/esm2015/app/app.version.js +4 -4
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
- package/esm2015/app/core/model/light-preset.js +11 -7
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +4 -6
- package/esm2015/app/core/service/homedecorator-connector.service.js +3 -1
- package/esm2015/app/core/service/utils.service.js +16 -1
- package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
- package/esm2015/app/plugins/core3d/items/floor-plane-item.js +25 -2
- package/esm2015/app/plugins/core3d/items/metadata.js +1 -1
- package/esm2015/app/plugins/core3d/service/ar.service.js +14 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +156 -0
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +122 -0
- package/esm2015/app/plugins/core3d/service/floor.service.js +5 -2
- package/esm2015/app/plugins/core3d/service/outline.service.js +9 -8
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +77 -22
- package/esm2015/app/plugins/core3d/service/scene.service.js +30 -13
- package/esm2015/app/plugins/core3d/service/ssr.service.js +53 -0
- package/esm2015/app/plugins/lite-selector/lite-selector/component/selections-summary/selections-summary.component.js +3 -3
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +335 -79
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +3 -2
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +3 -2
- package/esm2015/app/plugins/render/service/new-render.service.js +37 -13
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +34 -8
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
- package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
- package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
- package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
- package/fesm2015/colijnit-homedecorator.js +1156 -181
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +2 -2
- package/assets/hdri/ground_MASK.jpg +0 -0
|
@@ -211,6 +211,8 @@ export class HomedecoratorConnectorService {
|
|
|
211
211
|
}
|
|
212
212
|
getArticle(sku, branch) {
|
|
213
213
|
return __awaiter(this, void 0, void 0, function* () {
|
|
214
|
+
this.selections = [];
|
|
215
|
+
this._decoNodes = [];
|
|
214
216
|
const article = yield this._connector.getArticle(sku, branch)
|
|
215
217
|
.catch(e => {
|
|
216
218
|
return Promise.reject(e);
|
|
@@ -601,4 +603,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
601
603
|
providedIn: 'root'
|
|
602
604
|
}]
|
|
603
605
|
}], ctorParameters: function () { return [{ type: i1.HomedecoratorConnectorAdapterService }, { type: i2.JsonUtilsService }, { type: i3.HomedecoratorSettingsService }, { type: i4.SkipButtonInfoService }, { type: i5.MessageBusService }, { type: i6.HomedecoratorAppEventService }, { type: i7.GoogleTagManagerService }]; } });
|
|
604
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFLNUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUsxRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFJN0UsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sMkVBQTJFLENBQUM7QUFDNUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBS3ZHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFNcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7QUFJNUUsZ0hBQWdIO0FBSWhILE1BQU0sT0FBTyw2QkFBNkI7SUFrR3hDLFlBQ1UsVUFBZ0QsRUFDaEQsVUFBNEIsRUFDNUIsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxlQUFrQyxFQUNsQyxnQkFBOEMsRUFDOUMsaUJBQTBDO1FBTjFDLGVBQVUsR0FBVixVQUFVLENBQXNDO1FBQ2hELGVB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bnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtKc29uVXRpbHNTZXJ2aWNlfSBmcm9tICcuL2pzb24tdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U2tpcEJ1dHRvbkluZm9TZXJ2aWNlfSBmcm9tICcuL3NraXAtYnV0dG9uLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4vbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vdXRpbHMvZnVuY3Rpb24vaXMtbmlsbC5mdW5jdGlvbic7XHJcbmltcG9ydCB7QXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlJztcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGUnO1xyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vaW50ZXJuYWwtcGFyYW0uZW51bSc7XHJcbmltcG9ydCB7Tm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7QW5zd2VyUHJpY2V9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYW5zd2VyLXByaWNlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7T3B0aW9uc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb3B0aW9ucyc7XHJcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcclxuaW1wb3J0IHtBcnRpY2xlVGV4dH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXRleHQuYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mby1yZXF1ZXN0JztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvcmUzZC9tb2RlbC9jdXN0b20tZmxvb3ItZ3JvdXAtcmVzdWx0JztcclxuaW1wb3J0IHtSZXN1bHRUeXBlfSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0Vycm9yTWVzc2FnZX0gZnJvbSAnLi4vbW9kZWwvZXJyb3ItbWVzc2FnZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzJztcclxuaW1wb3J0IHtHb29kVHlwZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWZjb2RlL2dvb2QtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtGcm96ZW5BcnRpY2xlU2ltcGxlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Zyb3plbi1hcnRpY2xlLXNpbXBsZSc7XHJcbmltcG9ydCB7RnJvemVuQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9mcm96ZW4tYXJ0aWNsZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlckV2ZW50fSBmcm9tICcuLi9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9nb29nbGUtdGFnLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLXNvdXJjZS5ibyc7XHJcblxyXG4vLyBIb2xkcyBhbGwgaU9ORSBiYWNrZW5kIHJlbGF0ZWQgc3RhdGUgYW5kIG1ldGhvZHMgZm9yIGEgcnVubmluZyBIb21lRGVjb3JhdG9yLiBUbyBiZSB1c2VkIGFueXdoZXJlIGludGVybmFsbHkuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIGdldCBhcnRpY2xlKCk6IEFydGljbGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FydGljbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlY29Ob2RlcygpOiBEZWNvTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbnModmFsdWU6IFNlbGVjdGlvbltdKSB7XHJcbiAgICAvLyB0ZW1wIGZpeCBmb3IgcHJpY2VzIHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuX2FydGljbGVQcmljZSA9IHZhbHVlWzBdLmFydFJldGFpbFByaWNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXJ0aWNsZVByaWNlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9ucygpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlbGVjdGlvbnMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGdldCBhY3RpdmVRdWVzdGlvbigpOiBRdWVzdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYWN0aXZlUXVlc3Rpb247XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZUFuc3dlcnMoKTogQW5zd2VyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUFuc3dlcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZVNlbGVjdGlvbigpOiBTZWxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdG90YWxQcmljZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUHJpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3VsZFNob3dMb2FkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd0xvYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2hvdWxkU2hvd0xvYWRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWRlTG9hZGVyVGltZW91dCk7XHJcbiAgICAgIHRoaXMuX3Nob3VsZFNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGlkZUxvYWRlclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zaG91bGRTaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sIHRoaXMuX2hpZGVMb2FkZXJUaW1lclRpbWVvdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnRyb2xsZXJJbml0aWFsaXplZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGFydGljbGVSZWNlaXZlZDogU3ViamVjdDxBcnRpY2xlPiA9IG5ldyBTdWJqZWN0PEFydGljbGU+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbnNSZWNlaXZlZDogU3ViamVjdDxTZWxlY3Rpb25bXT4gPSBuZXcgU3ViamVjdDxTZWxlY3Rpb25bXT4oKTtcclxuICAvLyBwdWJsaWMgcmVhZG9ubHkgZGVjb05vZGVzUmVjZWl2ZWQ6IFN1YmplY3Q8RGVjb05vZGVbXT4gPSBuZXcgU3ViamVjdDxEZWNvTm9kZVtdPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBhbnN3ZXJDb3VudFJlY2VpdmVkOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGFuc3dlcnNSZWNlaXZlZDogU3ViamVjdDxBbnN3ZXJbXT4gPSBuZXcgU3ViamVjdDxBbnN3ZXJbXT4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXh0cmFBbnN3ZXJEYXRhTG9hZGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAvLyBwdWJsaWMgcmVhZG9ubHkgbW9vZEltYWdlc1JlY2VpdmVkOiBTdWJqZWN0PHsgYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgaW1hZ2VEYXRhOiBzdHJpbmcgfT4gPVxyXG4gIC8vICAgbmV3IFN1YmplY3Q8e2Fuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXJ8U2VsZWN0aW9uLCBpbWFnZURhdGE6IHN0cmluZ30+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbnNBbmREZWNvc0xpbmtlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25SZXNldDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBhc3NldFBhdGg6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0aW9uc1RvRGlzcGxheTogU2VsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfaGlkZUxvYWRlclRpbWVvdXQ6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oaWRlTG9hZGVyVGltZXJUaW1lb3V0OiBudW1iZXIgPSA1MDA7XHJcbiAgcHJpdmF0ZSBfYXJ0aWNsZTogQXJ0aWNsZTtcclxuICBwcml2YXRlIF9zZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2RlY29Ob2RlczogRGVjb05vZGVbXSA9IFtdO1xyXG4gIC8vIHByaXZhdGUgX2FjdGl2ZVF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICBwcml2YXRlIF9hY3RpdmVBbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FjdGl2ZVNlbGVjdGlvbjogU2VsZWN0aW9uO1xyXG4gIHByaXZhdGUgX2FydGljbGVQcmljZTogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxQcmljZTogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIF9zaG91bGRTaG93TG9hZGVyOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIF9jb25uZWN0b3JPcHRpb25zOiBPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaW1hZ2VDYWNoZTogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3I6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2pzb25VdGlsczogSnNvblV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NraXBCdXR0b25JbmZvU2VydmljZTogU2tpcEJ1dHRvbkluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCk6IFByb21pc2U8RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXROb2RlSW5zdGFuY2Uoc2t1OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuaW5pdE5vZGVJbnN0YW5jZShnb29kSWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZDogc3RyaW5nLCBvbGRDb25uZWN0aW9uOiBzdHJpbmcsIG5ld0Nvbm5lY3Rpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZCwgb2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbik7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1wdHlTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZGVjb05vZGVzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGZvciBvYnNvbGV0ZSBmdXJuaXR1cmVcclxuICAgKiBAcGFyYW0gc2VsZWN0aW9uc1xyXG4gICAqIEBwYXJhbSBleHRyYUluZm9cclxuICAgKi9cclxuICBwdWJsaWMgc2V0U2VsZWN0aW9ucyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSwgZXh0cmFJbmZvOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgLy8gdGhpcy5fb25TZWxlY3Rpb25zUmVjZWl2ZWQoc2VsZWN0aW9ucywgZXh0cmFJbmZvKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zKHNlbGVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCBmb3Igb2Jzb2xldGUgZnVybml0dXJlXHJcbiAgICogQHBhcmFtIGRlY29Ob2Rlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXREZWNvTm9kZXMoZGVjb05vZGVzOiBEZWNvTm9kZVtdKSB7XHJcbiAgICB0aGlzLl9kZWNvTm9kZXMgPSBkZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdENvbm5lY3Rpb24oZm9yY2VSZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoKHRoaXMuX2luaXRpYWxpemVkIHx8IHRoaXMuX2luaXRpYWxpemluZykgJiYgIWZvcmNlUmVsb2FkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRpYWxpemluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzZXR0aW5nczogSG9tZWRlY29yYXRvclNldHRpbmdzID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzO1xyXG4gICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1NldHRpbmdzIGFyZSBub3QgZGVmaW5lZCEnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9jb25uZWN0b3JPcHRpb25zID0gT2JqZWN0LmFzc2lnbihuZXcgT3B0aW9ucygpLCBzZXR0aW5ncyk7XHJcblxyXG4gICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yLnNob3dMb2FkZXIuc3Vic2NyaWJlKHNob3dMb2FkZXIgPT4gdGhpcy5vblNob3dMb2FkZXJDaGFuZ2Uoc2hvd0xvYWRlcikpLFxyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5jb25uZWN0aW9uUmVzZXQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Db25uZWN0aW9uUmVzZXQoKSksXHJcbiAgICAgICAgLy8gdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkFkZFRvQ2FydCwgKCkgPT4gdGhpcy5hZGRUb0NhcnQoKSlcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluaXRDb25uZWN0b3IodGhpcy5fY29ubmVjdG9yT3B0aW9ucywgdW5kZWZpbmVkLCBmb3JjZVJlbG9hZCk7XHJcbiAgICAgIC8vIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZXNzaW9uID0gdGhpcy5fY29ubmVjdG9yT3B0aW9ucy5zZXNzaW9uO1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXJJbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbTogSW50ZXJuYWxQYXJhbSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldEludGVybmFsUGFyYW1ldGVyKHBhcmFtKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZDogbnVtYmVyLCBnb29kVHlwZTogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyLFxyXG4gICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSwgaW5zdGFuY2VJZD86IG51bWJlciwgY29uZmlndXJhdG9yU3RhdGlzdGljcz86IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCk6IFByb21pc2U8YW55PiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRKc29uTWF0Y2hUYWJsZUFydGljbGVzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRJbnN0YW5jZShpZDogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaWQpLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm4gbmV3IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5SW5zdGFuY2VBbmRTYXZlT3JpZ2luYWxDb25maWd1cmF0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb3B5SW5zdGFuY2UoaW5zdGFuY2VJZCwgdHJ1ZSwgcmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5SW5zdGFuY2VBbmRMb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb3B5SW5zdGFuY2UoaW5zdGFuY2VJZCwgZmFsc2UsIHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZUNvbmZpZ3VyYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5zYXZlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBzYXZpbmcgY29uZmlndXJhdGlvbnMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlKHNrdTogc3RyaW5nLCBicmFuY2g6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRBcnRpY2xlKHNrdSwgYnJhbmNoKVxyXG4gICAgICAuY2F0Y2goZSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuYXJ0aWNsZVJlY2VpdmVkLm5leHQoYXJ0aWNsZSk7XHJcbiAgICByZXR1cm4gYXJ0aWNsZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRNb29kSW1hZ2VGb3JBbnN3ZXJTZWxlY3Rpb24oYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgdGh1bWJOYWlsOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29ubmVjdG9yLmdldE1vb2RJbWFnZUZvckFuc3dlclNlbGVjdGlvbihhbnN3ZXJPclNlbGVjdGlvbiwgdGh1bWJOYWlsKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBsb2FkU2VsZWN0aW9ucygpOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuc2VsZWN0aW9ucy5sZW5ndGggPSAwO1xyXG4gIC8vICAgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aCA9IDA7XHJcbiAgLy8gICB0aGlzLl9jb25uZWN0b3IubG9hZFNlbGVjdGlvbnMoKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRRdWVzdGlvbkFuZEFuc3dlcnMoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLl9jb25uZWN0b3IuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzQXN5bmMoKTogUHJvbWlzZTxRdWVzdGlvbkFuZEFuc3dlcnM+IHtcclxuICAgIGNvbnN0IHF1ZXN0aW9uQW5kQW5zd2VyczogUXVlc3Rpb25BbmRBbnN3ZXJzID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk7XHJcbiAgICBxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2VycyA9IHF1ZXN0aW9uQW5kQW5zd2Vycy5hbnN3ZXJzLmZpbHRlcihhID0+IHRoaXMuX2lzQW5zd2VyUHVibGlzaGVkKGEpKTtcclxuICAgIHJldHVybiBxdWVzdGlvbkFuZEFuc3dlcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0U2VsZWN0aW9uc0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoID0gMDtcclxuICAgIGNvbnN0IHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFNlbGVjdGlvbnNBc3luYygpXHJcbiAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zKHNlbGVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldERlY29zQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9kZWNvTm9kZXMgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0RGVjb3NBc3luYygpXHJcbiAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbnN3ZXIoYW5zd2VyOiBBbnN3ZXIsIGlucHV0Pzogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5zZWxlY3RBbnN3ZXIoYW5zd2VyLCBpbnB1dCk7XHJcbiAgICAvLyB0aGlzLnNlbGVjdEFuc3dlckNhbGxlZC5uZXh0KGFuc3dlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsQW5zd2VyKGdldEFuc3dlcnNBbmRRdWVzdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmNhbmNlbEFuc3dlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFNlbGVjdGlvbihcclxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBmb3JjZUJhY2tUb05vZGU/OiBib29sZWFuLCBhZnRlcj86IGJvb2xlYW4sIGNvbm5lY3Rvcj86IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbjtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3Iuc2VsZWN0U2VsZWN0aW9uKHNlbGVjdGlvbiwgZm9yY2VCYWNrVG9Ob2RlLCBhZnRlciwgY29ubmVjdG9yKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlcGxhY2VTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLnJlcGxhY2VTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBbnN3ZXJJbmZvKGFuc3dlcjogQW5zd2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhcnRpY2xlVGV4dHM6IEFydGljbGVUZXh0W10gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0QW5zd2VySW5mbyhhbnN3ZXIpO1xyXG4gICAgdGhpcy5fb25BbnN3ZXJJbmZvUmVjZWl2ZWQoe2Fuc3dlcjogYW5zd2VyLCBpbmZvOiBhcnRpY2xlVGV4dHN9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBleHRlbmRXaXRoQW5zd2VyVGV4dEFuZEltYWdlKGFuc3dlcjogQW5zd2VyLCBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKGFuc3dlci5ub2RlSWQpIHtcclxuICAgICAgaWYgKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhhbnN3ZXIubm9kZUlkKSkge1xyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRJbWFnZUZvckFuc3dlck9yU2VsZWN0aW9uKGFuc3dlciwgNCwgdHJ1ZSwgc2hvd0xvYWRlcikudGhlbigoaW1hZ2VEYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUltYWdlUmVjZWl2ZWQoYW5zd2VyLCBpbWFnZURhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGFuc3dlci5pbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChhbnN3ZXIubm9kZUlkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2tpcEJ1dHRvbkluZm9TZXJ2aWNlLmdldFNraXBCdXR0b25JbWFnZUFuZFRleHQoYW5zd2VyLmdvb2RJZCkudGhlbigodGV4dEFuZEltYWdlKSA9PiB7XHJcbiAgICAgICAgYW5zd2VyLmFuc3dlciA9IHRleHRBbmRJbWFnZS50ZXh0O1xyXG4gICAgICAgIGFuc3dlci5jb21tZXJjaWFsQW5zd2VyID0gdGV4dEFuZEltYWdlLnRleHQ7XHJcbiAgICAgICAgYW5zd2VyLmltYWdlRGF0YSA9IHRleHRBbmRJbWFnZS5pbWFnZUJvZHk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGV4dGVuZFdpdGhTZWxlY3Rpb25JbWFnZShzZWxlY3Rpb246IFNlbGVjdGlvbiwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChzZWxlY3Rpb24ubm9kZUlkKSB7XHJcbiAgICAgIGlmICghdGhpcy5faW1hZ2VDYWNoZS5oYXMoc2VsZWN0aW9uLm5vZGVJZCkpIHtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihzZWxlY3Rpb24sIDQsIHRydWUsIHNob3dMb2FkZXIpLnRoZW4oKGltYWdlRGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVJbWFnZVJlY2VpdmVkKHNlbGVjdGlvbiwgaW1hZ2VEYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3Rpb24uaW1hZ2VEYXRhID0gdGhpcy5faW1hZ2VDYWNoZS5nZXQoc2VsZWN0aW9uLm5vZGVJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnNUb0Rpc3BsYXlJbWFnZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1NlbGVjdGlvblB1Ymxpc2hlZChzZWxlY3Rpb246IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZSgpID09PSAyIHx8XHJcbiAgICAgICgoaXNOaWxsKHNlbGVjdGlvbi5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUpIHx8ICgoc2VsZWN0aW9uLmhpZXJhcmNoaWNhbFB1YmxpY2F0aW9uQ29kZSAmIHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZSgpKSA+IDApKSAmJlxyXG4gICAgICAoXHJcbiAgICAgICAgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiYgKCgoc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlICYgdGhpcy5fZ2V0UHVibGljYXRpb25Db2RlKCkpID4gMCkgfHxcclxuICAgICAgICAgIGlzTmlsbChzZWxlY3Rpb24ucXVlc3Rpb25QdWJsaWNhdGlvbkNvZGUpKSkgfHxcclxuICAgICAgICAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5BbnN3ZXIgJiYgKCgoc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSAmIHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZSgpKSA+IDApIHx8XHJcbiAgICAgICAgICBpc05pbGwoc2VsZWN0aW9uLmFuc3dlclB1YmxpY2F0aW9uQ29kZSkpKVxyXG4gICAgICApKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTZWxlY3Rpb25zKHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnMgPSBzZWxlY3Rpb25zLnNsaWNlKDApO1xyXG4gICAgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnNUb0Rpc3BsYXkoKTtcclxuICAgIGxldCB0b3RhbFByaWNlID0gMDtcclxuICAgIGlmICh0aGlzLl9zZWxlY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGlvbnMuZm9yRWFjaChzZWxlY3Rpb24gPT4ge1xyXG4gICAgICAgIHRvdGFsUHJpY2UgKz0gc2VsZWN0aW9uLmFydFJldGFpbFByaWNlID8gc2VsZWN0aW9uLmFydFJldGFpbFByaWNlIDogMDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl90b3RhbFByaWNlID0gTWF0aC5yb3VuZCgodG90YWxQcmljZSArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkgLyAxMDA7XHJcbiAgICB0aGlzLl9jdXJyZW50U2VsZWN0aW9ucyA9IHRoaXMuc2VsZWN0aW9ucy5zbGljZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdGlvbnNUb0Rpc3BsYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcmVwYXJlQW5zd2Vyc0FuZEltYWdlcyh0aGlzLnNlbGVjdGlvbnMpO1xyXG4gICAgY29uc3QgYWxsU2VsZWN0aW9uczogU2VsZWN0aW9uW10gPSB0aGlzLnNlbGVjdGlvbnMuZmlsdGVyKHMgPT4gdGhpcy5faXNTZWxlY3Rpb25QdWJsaXNoZWQocykpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5ID0gYWxsU2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLm5vZGVUeXBlICE9PSBOb2RlVHlwZS5BcnRpY2xlICYmIHMucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zUmVjZWl2ZWQubmV4dCh0aGlzLnNlbGVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZUFuc3dlcnNBbmRJbWFnZXMoc2VsZWN0aW9uczogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiA9IHNlbGVjdGlvbnNbaV07XHJcbiAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVTZWxlY3Rpb25BbnN3ZXJzKHNlbGVjdGlvbiwgc2VsZWN0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3ByZWxvYWRDYWNoZWRJbWFnZXModGhpcy5zZWxlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdGlvbkFuc3dlcnMoc2VsZWN0aW9uOiBTZWxlY3Rpb24sIHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBhbnN3ZXJzRnJvbVNlbGVjdGlvbjogU2VsZWN0aW9uW10gPSBzZWxlY3Rpb25zLmZpbHRlcihcclxuICAgICAgICBzID0+IHMucGFyZW50QXJ0Tm9kZUlkRGVjbyAmJiBzZWxlY3Rpb24ubm9kZUlkICYmIHMucGFyZW50QXJ0Tm9kZUlkRGVjby50b1N0cmluZygpID09PSBzZWxlY3Rpb24ubm9kZUlkLnRvU3RyaW5nKCkpO1xyXG4gICAgdGhpcy5fcHJlcGFyZVNlbGVjdGlvbnNOZXh0T3B0aW9uVmFsdWVzKGFuc3dlcnNGcm9tU2VsZWN0aW9uKTtcclxuICAgIHNlbGVjdGlvbi5sYXN0QW5zd2VyID0gKGFuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCA+IDApICYmIGFuc3dlcnNGcm9tU2VsZWN0aW9uW2Fuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCAtIDFdLmFuc3dlciA/XHJcbiAgICAgIGFuc3dlcnNGcm9tU2VsZWN0aW9uW2Fuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCAtIDFdLmFuc3dlci50cmltKCkgOlxyXG4gICAgICAnJztcclxuICAgIHNlbGVjdGlvbi5sYXN0QW5zd2VyTm9kZUlkID0gYW5zd2Vyc0Zyb21TZWxlY3Rpb24ubGVuZ3RoID4gMCA/IGFuc3dlcnNGcm9tU2VsZWN0aW9uW2Fuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCAtIDFdLm5vZGVJZCA6IHVuZGVmaW5lZDtcclxuICAgIGxldCBhbnN3ZXJUcmVlOiBhbnk7XHJcbiAgICBsZXQgYW5zd2VyVHJlZVN0cmluZzogc3RyaW5nO1xyXG4gICAgaWYgKGFuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcclxuICAgICAgYW5zd2VyVHJlZSA9IGFuc3dlcnNGcm9tU2VsZWN0aW9uXHJcbiAgICAgICAgLmZpbHRlcihzID0+IHRoaXMuX2lzU2VsZWN0aW9uUHVibGlzaGVkKHMpIHx8IHMudXNlcklucHV0KVxyXG4gICAgICAgIC5tYXAoKHM6IFNlbGVjdGlvbiwgaWR4OiBudW1iZXIsIGFycjogU2VsZWN0aW9uW10pID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBzLnVzZXJJbnB1dCA/IChzLmFuc3dlciA/IHMuYW5zd2VyLnRyaW0oKSA6ICcnKSA6IChzLnF1ZXN0aW9uID8gcy5xdWVzdGlvbi50cmltKCkgOiAnJyksXHJcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzLmFuc3dlclRyZWVTdHJpbmcgPyBzLmFuc3dlclRyZWVTdHJpbmcgOiAocy51c2VySW5wdXQgPyAocy51c2VySW5wdXRWYWx1ZSA/IHMudXNlcklucHV0VmFsdWUudHJpbSgpIDogJycpIDogKHMuYW5zd2VyID8gcy5hbnN3ZXIudHJpbSgpIDogJycpKSxcclxuICAgICAgICAgICAgcHJpY2U6IHMuYXJ0UmV0YWlsUHJpY2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGFuc3dlclRyZWVTdHJpbmcgPSBhbnN3ZXJzRnJvbVNlbGVjdGlvblxyXG4gICAgICAgIC5maWx0ZXIocyA9PiB0aGlzLl9pc0FsbFNlbGVjdGlvblB1Ymxpc2hlZChzKSB8fCBzLnVzZXJJbnB1dClcclxuICAgICAgICAubWFwKChzOiBTZWxlY3Rpb24sIGlkeDogbnVtYmVyLCBhcnI6IFNlbGVjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBzLnVzZXJJbnB1dCA/IChzLnVzZXJJbnB1dFZhbHVlID8gcy51c2VySW5wdXRWYWx1ZS50cmltKCkgOiAnJykgOiAocy5hbnN3ZXIgPyBzLmFuc3dlci50cmltKCkgOiAnJylcclxuICAgICAgICB9KS5qb2luKCcgLSAnKTtcclxuICAgIH1cclxuICAgIHNlbGVjdGlvbi5hbnN3ZXJUcmVlU3RyaW5nID0gYW5zd2VyVHJlZVN0cmluZztcclxuICAgIGlmIChhbnN3ZXJUcmVlKSB7XHJcbiAgICAgIHNlbGVjdGlvbi5hbnN3ZXJUcmVlID0gSlNPTi5zdHJpbmdpZnkoYW5zd2VyVHJlZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZSA9IEpTT04uc3RyaW5naWZ5KFt7XHJcbiAgICAgICAgdGl0bGU6IHNlbGVjdGlvbi51c2VySW5wdXQgPyAoc2VsZWN0aW9uLmFuc3dlciA/IHNlbGVjdGlvbi5hbnN3ZXIudHJpbSgpIDogJycpIDogKHNlbGVjdGlvbi5xdWVzdGlvbiA/IHNlbGVjdGlvbi5xdWVzdGlvbi50cmltKCkgOiAnJyksXHJcbiAgICAgICAgZGVzY3JpcHRpb246IHNlbGVjdGlvbi51c2VySW5wdXQgPyAoc2VsZWN0aW9uLnVzZXJJbnB1dFZhbHVlID8gc2VsZWN0aW9uLnVzZXJJbnB1dFZhbHVlLnRyaW0oKSA6ICcnKSA6IChzZWxlY3Rpb24uYW5zd2VyID8gc2VsZWN0aW9uLmFuc3dlci50cmltKCkgOiAnJyksXHJcbiAgICAgICAgcHJpY2U6IHNlbGVjdGlvbi5hcnRSZXRhaWxQcmljZVxyXG4gICAgICB9XSk7XHJcbiAgICB9XHJcbiAgICBsZXQgdG90YWxQcmljZTogbnVtYmVyID0gMDsgLy8gdGVtcCBmaXggdW50aWwgYmFja2VuZCBpcyByZWFkeVxyXG4gICAgYW5zd2Vyc0Zyb21TZWxlY3Rpb24uZm9yRWFjaCgoczogU2VsZWN0aW9uKSA9PiB7XHJcbiAgICAgIHRvdGFsUHJpY2UgKz0gcy5hcnRSZXRhaWxQcmljZSA/IHMuYXJ0UmV0YWlsUHJpY2UgOiAwOyAvLyB0ZW1wIGZpeCB1bnRpbCBiYWNrZW5kIGlzIHJlYWR5XHJcbiAgICB9KTtcclxuICAgIChzZWxlY3Rpb24gYXMgYW55KS50b3RhbFByaWNlID0gdG90YWxQcmljZTsgLy8gdGVtcCBmaXggdW50aWwgYmFja2VuZCBpcyByZWFkeVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNTZWxlY3Rpb25QdWJsaXNoZWQoczogU2VsZWN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmICgoKHMub3B0aW9uU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwocy5vcHRpb25TaG93T24pKSkgfHxcclxuICAgICAgICAocy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmICgoKHMubm9kZVNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKHMubm9kZVNob3dPbikpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzQWxsU2VsZWN0aW9uUHVibGlzaGVkKHM6IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJiAoKChzLm9wdGlvblNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKHMub3B0aW9uU2hvd09uKSkpIHx8XHJcbiAgICAgICAgKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLk5leHRPcHRpb25WYWx1ZSAmJiAoKChzLm5vZGVTaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm5vZGVTaG93T24pKSkgfHxcclxuICAgICAgICAocy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmICgoKHMubm9kZVNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKHMubm9kZVNob3dPbikpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzQW5zd2VyUHVibGlzaGVkKGE6IEFuc3dlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChpc05pbGwoYS5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUpIHx8ICgoYS5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUgJiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSkgPiAwKSkvKiAmJlxyXG4gICAgICAgIChcclxuICAgICAgICAgICAgKGEudHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiYgKCgoYS5vcHRpb25TaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChhLm9wdGlvblNob3dPbikpKSB8fFxyXG4gICAgICAgICAgICAoYS50eXBlID09PSBOb2RlVHlwZS5BbnN3ZXIgJiYgKCgoYS5ub2RlU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwoYS5ub2RlU2hvd09uKSkpXHJcbiAgICAgICAgKSovO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlbG9hZENhY2hlZEltYWdlcyhhbnN3ZXJzT3JTZWxlY3Rpb25zOiBBbnN3ZXJbXSB8IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICBhbnN3ZXJzT3JTZWxlY3Rpb25zLmZvckVhY2goKGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24pID0+IHtcclxuICAgICAgaWYgKGFuc3dlck9yU2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQpKSB7XHJcbiAgICAgICAgICBhbnN3ZXJPclNlbGVjdGlvbi5pbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgYWRkVG9DYXJ0KGdvb2RJZDogbnVtYmVyLCBnb29kVHlwZTogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyLCBpbnN0YW5jZUlkOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IGpzb246IHN0cmluZztcclxuICAgIGNvbnN0IHN0YXRpc3RpY3M6IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCA9IG5ldyBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQoKTtcclxuICAgIHN0YXRpc3RpY3MudXNlclR5cGUgPSAnSG9tZWRlY29yYXRvcic7XHJcbiAgICBzdGF0aXN0aWNzLnRyYW5zYWN0aW9uVHlwZSA9ICdTYWxlcyc7XHJcbiAgICBzdGF0aXN0aWNzLmFjdGlvbkRvbWFpbiA9ICdIb21lZGVjb3JhdG9yJztcclxuICAgIHN0YXRpc3RpY3Muc2Vzc2lvbklkID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlc3Npb24gPyB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2Vzc2lvbi5zZXNzaW9uSWQgOiAndW5rbm93bic7XHJcbiAgICBzdGF0aXN0aWNzLndlYkhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIHN0YXRpc3RpY3MuYnVuZGxlSG9zdCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0O1xyXG4gICAganNvbiA9IGF3YWl0IHRoaXMuZ2V0SnNvbkNvbmZpZ3VyZWRBcnRpY2xlcyhnb29kSWQsIGdvb2RUeXBlLCBxdWFudGl0eSwgZmFsc2UsIGluc3RhbmNlSWQsIHN0YXRpc3RpY3MpO1xyXG4gICAgY29uc3QgZnJvemVuQXJ0aWNsZTogRnJvemVuQXJ0aWNsZVNpbXBsZSB8IEZyb3plbkFydGljbGUgPSBKU09OLnBhcnNlKGpzb24pO1xyXG4gICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LkFkZFRvQ2FydCwge1xyXG4gICAgICAnYXJ0aWNsZU5yJzogZnJvemVuQXJ0aWNsZS5hcnRpY2xlTnIsXHJcbiAgICAgICdwcm9kdWN0JzogZnJvemVuQXJ0aWNsZS5hcnRpY2xlTmFtZSxcclxuICAgICAgJ2NvbXBvc2l0aW9uJzogZnJvemVuQXJ0aWNsZSBpbnN0YW5jZW9mIEZyb3plbkFydGljbGUgPyBmcm96ZW5BcnRpY2xlLmNvbXBvc2l0aW9ucyA6IGZyb3plbkFydGljbGUuY29uZmlndXJhdGlvblRleHRcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuQXJ0aWNsZUNyZWF0ZWQsIGpzb24pO1xyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaGFuZGxlQW5zd2Vyc1JlY2VpdmVkKGFuc3dlcnM6IEFuc3dlcltdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9hY3RpdmVBbnN3ZXJzID0gYW5zd2VycztcclxuICAgIHRoaXMuYW5zd2VyQ291bnRSZWNlaXZlZC5uZXh0KHRoaXMuX2FjdGl2ZUFuc3dlcnMubGVuZ3RoKTtcclxuICAgIHRoaXMuX3ByZWxvYWRDYWNoZWRJbWFnZXMoYW5zd2Vycyk7XHJcbiAgICB0aGlzLmFuc3dlcnNSZWNlaXZlZC5uZXh0KGFuc3dlcnMpO1xyXG4gICAgaWYgKHRoaXMuX2FjdGl2ZUFuc3dlcnMpIHtcclxuICAgICAgdGhpcy5fbG9hZFByaWNlc09mQWN0aXZlQW5zd2VycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdGlvbnNUb0Rpc3BsYXlJbWFnZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5ICYmIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXlbaV07XHJcbiAgICAgICAgY29uc3QgbGFzdEFuc3dlclNlbGVjdGlvbjogU2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9ucy5maW5kKHMgPT4gcy5ub2RlSWQgPT09IHNlbGVjdGlvbi5sYXN0QW5zd2VyTm9kZUlkKTtcclxuICAgICAgICBpZiAobGFzdEFuc3dlclNlbGVjdGlvbiAmJiAoc2VsZWN0aW9uLmdlbmVyaWMgfHwgc2VsZWN0aW9uLmdyb3VwZWQpKSB7XHJcbiAgICAgICAgICBpZiAoIWxhc3RBbnN3ZXJTZWxlY3Rpb24uaW1hZ2VEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRJbWFnZUZvckFuc3dlck9yU2VsZWN0aW9uKGxhc3RBbnN3ZXJTZWxlY3Rpb24sIDQsIHRydWUsIGZhbHNlKS50aGVuKChpbWFnZURhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2hhbmRsZUltYWdlUmVjZWl2ZWQobGFzdEFuc3dlclNlbGVjdGlvbiwgaW1hZ2VEYXRhKTtcclxuICAgICAgICAgICAgICBzZWxlY3Rpb24uaW1hZ2VEYXRhTGFzdEFuc3dlciA9IGxhc3RBbnN3ZXJTZWxlY3Rpb24uaW1hZ2VEYXRhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5pbWFnZURhdGFMYXN0QW5zd2VyID0gbGFzdEFuc3dlclNlbGVjdGlvbi5pbWFnZURhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9uc05leHRPcHRpb25WYWx1ZXMoc2VsZWN0aW9uczogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbjogbnVtYmVyID0gc2VsZWN0aW9ucy5sZW5ndGggLSAxO1xyXG4gICAgbGV0IG5vdlRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChsZXQgaSA9IGxlbjsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLm5vZGVUeXBlID09PSBOb2RlVHlwZS5OZXh0T3B0aW9uVmFsdWUpIHtcclxuICAgICAgICBub3ZUZXh0ID0gc2VsZWN0aW9uLmFuc3dlciArIChub3ZUZXh0ID8gYCAtICR7bm92VGV4dH1gIDogJycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChub3ZUZXh0KSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZVN0cmluZyA9IGAke3NlbGVjdGlvbi5hbnN3ZXJ9IC0gJHtub3ZUZXh0fWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vdlRleHQgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UHVibGljYXRpb25Db2RlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldFB1YmxpY2F0aW9uQ29kZUJhc2VkT25Mb2dpbigpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBfb25EZWNvTm9kZXNSZWNlaXZlZChkZWNvTm9kZXM6IERlY29Ob2RlW10pOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuX2RlY29Ob2RlcyA9IGRlY29Ob2RlcztcclxuICAvLyAgIHRoaXMuZGVjb05vZGVzUmVjZWl2ZWQubmV4dChkZWNvTm9kZXMpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBfb25RdWVzdGlvblJlY2VpdmVkKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5fYWN0aXZlUXVlc3Rpb24gPSBxdWVzdGlvbjtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUltYWdlUmVjZWl2ZWQoYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgaW1hZ2VEYXRhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpbWFnZURhdGFPclVybDogc3RyaW5nO1xyXG4gICAgaWYgKGltYWdlRGF0YSkge1xyXG4gICAgICBpZiAoaW1hZ2VEYXRhLm1hdGNoKC9kYXRhOmltYWdlLykgfHwgaW1hZ2VEYXRhLnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBpbWFnZURhdGEuc3RhcnRzV2l0aCgnd3d3JykpIHtcclxuICAgICAgICBpbWFnZURhdGFPclVybCA9IGltYWdlRGF0YTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5hc3NldFBhdGggJiYgIXRoaXMuYXNzZXRQYXRoLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXRQYXRoICs9ICcvJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGltYWdlRGF0YS5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgICAgIGltYWdlRGF0YSA9IGltYWdlRGF0YS5zdWJzdHIoMSwgaW1hZ2VEYXRhLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGltYWdlRGF0YU9yVXJsID0gKHRoaXMuYXNzZXRQYXRoID8gdGhpcy5hc3NldFBhdGggOiAnJykgKyBpbWFnZURhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICg8YW55PmFuc3dlck9yU2VsZWN0aW9uKS5pbWFnZURhdGEgPSBpbWFnZURhdGFPclVybCA9PT0gdW5kZWZpbmVkID8gJycgOiBpbWFnZURhdGFPclVybDtcclxuICAgIGlmIChpbWFnZURhdGFPclVybCkge1xyXG4gICAgICB0aGlzLl9jYWNoZUltYWdlKGFuc3dlck9yU2VsZWN0aW9uLm5vZGVJZCwgaW1hZ2VEYXRhT3JVcmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FjaGVJbWFnZShpZDogbnVtYmVyLCBpbWFnZURhdGFPclVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbWFnZUNhY2hlLnNldChpZCwgaW1hZ2VEYXRhT3JVcmwpO1xyXG4gIH1cclxuXHJcbiAgLy8gd2lsbCBiZSB1c2VkL2ltcGxlbWVudGVkIGxhdGVyIG9uLCBvbiB0aGUgcHJvZHVjdCBkZXRhaWwgcGFnZVxyXG4gIC8vIHByaXZhdGUgX29uTW9vZEltYWdlUmVjZWl2ZWQobW9vZEltYWdlRGF0YTogYW55KTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLm1vb2RJbWFnZXNSZWNlaXZlZC5uZXh0KG1vb2RJbWFnZURhdGEpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25BbnN3ZXJJbmZvUmVjZWl2ZWQoZGF0YTogeyBhbnN3ZXI6IEFuc3dlciwgaW5mbzogQXJ0aWNsZVRleHRbXSB9KTogdm9pZCB7XHJcbiAgICAvLyBAdG9kbyBjaGVjayB0aGlzXHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmFuc3dlciAmJiBkYXRhLmluZm8pIHtcclxuICAgICAgbGV0IGluZm9NZXNzYWdlID0gJyc7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW46IG51bWJlciA9IGRhdGEuaW5mby5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGluZm86IEFydGljbGVUZXh0ID0gZGF0YS5pbmZvW2ldO1xyXG4gICAgICAgIGluZm9NZXNzYWdlICs9IGluZm8uZGVzY3JpcHRpb24gKyAnXFxuXFxuJyArIGluZm8udGV4dDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuYXJ0aWNsZUluZm9SZWNlaXZlZC5uZXh0KGluZm9NZXNzYWdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblNob3dMb2FkZXJDaGFuZ2Uoc2hvd0xvYWRlcjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fc2hvdWxkU2hvd0xvYWRlciA9IHNob3dMb2FkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Db25uZWN0aW9uUmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbm5lY3Rpb25SZXNldC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKHJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSk6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhIHtcclxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0ICYmIHJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQuc3VjY2Vzcykge1xyXG4gICAgICB0aGlzLl9hcHBFdmVudFNlcnZpY2UuaW5zdGFuY2VTZXQubmV4dChyZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gIH1cclxuXHJcbiAgLy8gUE9TVENPTkRJVElPTjogY3VycmVudCBhY3RpdmVBbnN3ZXJzIGhhdmUgcHJpY2UgdmFsdWVzLlxyXG4gIHByaXZhdGUgYXN5bmMgX2xvYWRQcmljZXNPZkFjdGl2ZUFuc3dlcnMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBhbnN3ZXJQcmljZXM6IEFuc3dlclByaWNlW10gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0QW5zd2VyUHJpY2VzKCk7XHJcbiAgICBpZiAoYW5zd2VyUHJpY2VzKSB7XHJcbiAgICAgIC8vIHBhc3RlIHByaWNlIGRhdGEgb250byBvdXIgY3VycmVudCBhbnN3ZXIgb2JqZWN0czsgQW5zd2VyUHJpY2Uuc2VsSWQgY29ycmVzcG9uZHMgdG8gQW5zd2VyLm5vZGVcclxuICAgICAgYW5zd2VyUHJpY2VzLmZvckVhY2goYW5zd2VyUHJpY2UgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFuc3dlck1hdGNoOiBBbnN3ZXIgPSB0aGlzLl9hY3RpdmVBbnN3ZXJzLmZpbmQoYW5zID0+IGFucy5ub2RlID09PSBhbnN3ZXJQcmljZS5zZWxJZCk7XHJcbiAgICAgICAgaWYgKGFuc3dlck1hdGNoKSB7XHJcbiAgICAgICAgICAoPGFueT5hbnN3ZXJNYXRjaCkucHJpY2UgPSAvLyB0ZW1wIGZpeCBmb3IgcHJpY2UgdW50aWwgYmFja2VuZCBpcyByZWFkeVxyXG4gICAgICAgICAgICAoPGFueT5hbnN3ZXJNYXRjaCkubm9kZUxldmVsID09PSAwICYmIGFuc3dlclByaWNlLmFkZFJldGFpbFByaWNlICYmICg8YW55PmFuc3dlck1hdGNoKS5zZXFPID09PSAxID9cclxuICAgICAgICAgICAgICBhbnN3ZXJQcmljZS5hZGRSZXRhaWxQcmljZSAtIHRoaXMuX2FydGljbGVQcmljZSA6XHJcbiAgICAgICAgICAgICAgYW5zd2VyUHJpY2UuYWRkUmV0YWlsUHJpY2U7XHJcbiAgICAgICAgICB0aGlzLmV4dHJhQW5zd2VyRGF0YUxvYWRlZC5uZXh0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NvcHlJbnN0YW5jZShcclxuICAgIG9yaWdpbmFsSW5zdGFuY2VJZDogc3RyaW5nLFxyXG4gICAgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkOiBib29sZWFuLFxyXG4gICAgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0XHJcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGNvcHlJbnN0YW5jZVJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9XHJcbiAgICAgIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5jb3B5SW5zdGFuY2Uob3JpZ2luYWxJbnN0YW5jZUlkLCBzaG91bGRTYXZlQ3VycmVudEluc3RhbmNlSWQpLmNhdGNoKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUgPT09ICdFQ09OTkFCT1JURUQnIHx8IGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLlRpbWVvdXQ7XHJcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnJlc3VsdFR5cGUgPSBSZXN1bHRUeXBlLlVua25vd247XHJcbiAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKGNvcHlJbnN0YW5jZVJlc3BvbnNlLnJlc3VsdE9iamVjdC5kYXRhKSk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKCFjb3B5SW5zdGFuY2VSZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgaWYgKGNvcHlJbnN0YW5jZVJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQubWVzc2FnZXMubWFwKChtOiBhbnkpID0+IG0ubWVzc2FnZVR5cGUgPT09ICdFJykgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uTm90Rml4ZWQ7XHJcbiAgICAgICAgY29weUluc3RhbmNlUmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5tZXNzYWdlcy5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgcmVzdWx0LmVycm9yTWVzc2FnZXMucHVzaChuZXcgRXJyb3JNZXNzYWdlKG0ubWVzc2FnZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Db25maWd1cmF0aW9uUGFydGlhbGx5Rml4ZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IG5ld0luc3RhbmNlSWQ6IHN0cmluZyA9IGNvcHlJbnN0YW5jZVJlc3BvbnNlLnJlc3VsdE9iamVjdDtcclxuICAgIHRoaXMuX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UoY29weUluc3RhbmNlUmVzcG9uc2UpO1xyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXdJbnN0YW5jZUlkKTtcclxuICB9XHJcbn1cclxuIl19
|
|
606
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFLNUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUsxRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFJN0UsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0sMkVBQTJFLENBQUM7QUFDNUgsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdFQUFnRSxDQUFDO0FBS3ZHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFNcEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7QUFJNUUsZ0hBQWdIO0FBSWhILE1BQU0sT0FBTyw2QkFBNkI7SUFrR3hDLFlBQ1UsVUFBZ0QsRUFDaEQsVUFBNEIsRUFDNUIsZ0JBQThDLEVBQzlDLHNCQUE2QyxFQUM3QyxlQUFrQyxFQUNsQyxnQkFBOEMsRUFDOUMsaUJBQTBDO1FBTjFDLGVBQVUsR0FBVixVQUFVLENBQXNDO1FBQ2hELGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBOEI7UUFDOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQUM3QyxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXlCO1FBOUM3QywwQkFBcUIsR0FBNkIsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDN0Usb0JBQWUsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUMzRCx1QkFBa0IsR0FBeUIsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUN0RixzRkFBc0Y7UUFDdEUsd0JBQW1CLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDN0Qsb0JBQWUsR0FBc0IsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUM3RCwwQkFBcUIsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUMzRSw4R0FBOEc7UUFDOUcsNkVBQTZFO1FBQzdELDZCQUF3QixHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzlELG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFHOUQsd0JBQW1CLEdBQWdCLEVBQUUsQ0FBQztRQUc1Qiw0QkFBdUIsR0FBVyxHQUFHLENBQUM7UUFFL0MsZ0JBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBQzlCLHVCQUFrQixHQUFnQixFQUFFLENBQUM7UUFDckMsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUNwQyxxQ0FBcUM7UUFDN0IsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFNMUIsc0JBQWlCLEdBQVksSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVsQyxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUVwQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5QixnQkFBVyxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBV3JELENBQUM7SUF6R0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxVQUFVLENBQUMsS0FBa0I7UUFDdEMsNkNBQTZDO1FBQzdDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDeEI7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxpQ0FBaUM7SUFDakMsSUFBSTtJQUVKLElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsZ0JBQWdCLENBQUMsS0FBYztRQUN4QyxJQUFJLEtBQUssRUFBRTtZQUNULFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztZQUNqQyxDQUFDLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBb0RELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVZLHFCQUFxQixDQUFDLE9BQTBDOztZQUMzRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsQ0FBQztLQUFBO0lBRVksZ0JBQWdCLENBQUMsR0FBVzs7WUFDdkMsTUFBTSxNQUFNLEdBQVcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sUUFBUSxHQUE0QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekYsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQztLQUFBO0lBRVksZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxhQUFxQixFQUFFLGFBQXFCOztZQUM1RixNQUFNLFFBQVEsR0FBNEIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDM0gsT0FBTyxRQUFRLElBQUksUUFBUSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDcEYsQ0FBQztLQUFBO0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLFVBQXVCLEVBQUUsWUFBcUIsSUFBSTtRQUNyRSxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsU0FBcUI7UUFDdkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVZLGNBQWMsQ0FBQyxXQUFxQjs7WUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUM3RCxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixJQUFJO2dCQUNGLE1BQU0sUUFBUSxHQUEwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNiLE1BQU0sS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7aUJBQzFDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBRWhFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUN2RixJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FFMUUsQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3BGLDJFQUEyRTtnQkFDM0UsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2FBQzVCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7YUFDNUI7UUFDSCxDQUFDO0tBQUE7SUFFTSxvQkFBb0IsQ0FBQyxLQUFvQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLHlCQUF5QixDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQy9FLGFBQXNCLElBQUksRUFBRSxVQUFtQixFQUFFLHNCQUEwRDtRQUU3RyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9ILENBQUM7SUFFRCxxREFBcUQ7SUFDckQsd0RBQXdEO0lBQ3hELElBQUk7SUFFUyxXQUFXLENBQUMsRUFBVTs7WUFDakMsTUFBTSxRQUFRLEdBQTRCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsQ0FBQztLQUFBO0lBRU0sd0NBQXdDLENBQUMsVUFBa0IsRUFBRSxNQUE4QjtRQUNoRyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sd0NBQXdDLENBQUMsVUFBa0IsRUFBRSxNQUE4QjtRQUNoRyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRVksa0JBQWtCOztZQUM3QixNQUFNLE9BQU8sR0FBWSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQzthQUM5QztRQUNILENBQUM7S0FBQTtJQUVZLFVBQVUsQ0FBQyxHQUFXLEVBQUUsTUFBYzs7WUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDO2lCQUNuRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1QsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztLQUFBO0lBRU0sOEJBQThCLENBQUMsaUJBQXFDLEVBQUUsWUFBcUIsSUFBSTtRQUNwRyxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsZ0NBQWdDO0lBQ2hDLHlDQUF5QztJQUN6QyxzQ0FBc0M7SUFDdEMsSUFBSTtJQUVKLHlDQUF5QztJQUN6Qyw2Q0FBNkM7SUFDN0MsSUFBSTtJQUVTLDBCQUEwQjs7WUFDckMsTUFBTSxrQkFBa0IsR0FBdUIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEcsa0JBQWtCLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRyxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUM7S0FBQTtJQUVZLGtCQUFrQjs7WUFDN0IsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMzQixNQUFNLFVBQVUsR0FBZ0IsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFO2lCQUN2RSxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEMsQ0FBQztLQUFBO0lBRVksYUFBYTs7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFO2lCQUNwRCxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNWLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7SUFFTSxZQUFZLENBQUMsTUFBYyxFQUFFLEtBQWM7UUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsd0NBQXdDO0lBQzFDLENBQUM7SUFFTSxZQUFZLENBQUMsd0JBQWlDLElBQUk7UUFDdkQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxlQUFlLENBQ3BCLFNBQW9CLEVBQUUsZUFBeUIsRUFBRSxLQUFlLEVBQUUsU0FBa0I7UUFDcEYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxlQUFlLENBQUMsU0FBb0I7UUFDekMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsU0FBb0I7UUFDMUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFWSxhQUFhLENBQUMsTUFBYzs7WUFDdkMsTUFBTSxZQUFZLEdBQWtCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO0tBQUE7SUFFWSw0QkFBNEIsQ0FBQyxNQUFjLEVBQUUsYUFBc0IsSUFBSTs7WUFDbEYsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUN4QyxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTt3QkFDbkcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDL0MsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3hEO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtvQkFDekYsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO29CQUNsQyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDNUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUFBO0lBRVksd0JBQXdCLENBQUMsU0FBb0IsRUFBRSxhQUFzQixJQUFJOztZQUNwRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsNEJBQTRCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFO3dCQUN0RyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUNsRCxDQUFDLENBQUMsQ0FBQztpQkFDSjtxQkFBTTtvQkFDTCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDOUQ7Z0JBQ0QsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLENBQUM7YUFDMUM7UUFDSCxDQUFDO0tBQUE7SUFFTSxvQkFBb0IsQ0FBQyxTQUFvQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUM7WUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlILENBQ0UsQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsSCxNQUFNLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztvQkFDN0MsQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM5RyxNQUFNLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsVUFBdUI7UUFDaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ25DLFVBQVUsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFVBQXVCO1FBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sU0FBUyxHQUFjLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFNBQW9CLEVBQUUsVUFBdUI7UUFDM0UsTUFBTSxvQkFBb0IsR0FBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FDdkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEtBQUssU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hILElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlELFNBQVMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hILG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyRSxFQUFFLENBQUM7UUFDTCxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3hJLElBQUksVUFBZSxDQUFDO1FBQ3BCLElBQUksZ0JBQXdCLENBQUM7UUFDN0IsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLFVBQVUsR0FBRyxvQkFBb0I7aUJBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO2lCQUN6RCxHQUFHLENBQUMsQ0FBQyxDQUFZLEVBQUUsR0FBVyxFQUFFLEdBQWdCLEVBQUUsRUFBRTtnQkFDbkQsT0FBTztvQkFDTCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzlGLFdBQVcsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM1SixLQUFLLEVBQUUsQ0FBQyxDQUFDLGNBQWM7aUJBQ3hCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNMLGdCQUFnQixHQUFHLG9CQUFvQjtpQkFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7aUJBQzVELEdBQUcsQ0FBQyxDQUFDLENBQVksRUFBRSxHQUFXLEVBQUUsR0FBZ0IsRUFBRSxFQUFFO2dCQUNqRCxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDOUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2xCO1FBQ0QsU0FBUyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQzlDLElBQUksVUFBVSxFQUFFO1lBQ2QsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDTCxTQUFTLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDckMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN0SSxXQUFXLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3hKLEtBQUssRUFBRSxTQUFTLENBQUMsY0FBYztpQkFDaEMsQ0FBQyxDQUFDLENBQUM7U0FDTDtRQUNELElBQUksVUFBVSxHQUFXLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUM5RCxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRTtZQUM1QyxVQUFVLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0NBQWtDO1FBQzNGLENBQUMsQ0FBQyxDQUFDO1FBQ0YsU0FBaUIsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsa0NBQWtDO0lBQ2hGLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxDQUFZO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDckcsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsQ0FBWTtRQUMzQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVPLGtCQUFrQixDQUFDLENBQVM7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTs7OztlQUk3RyxDQUFDO0lBQ1YsQ0FBQztJQUVPLG9CQUFvQixDQUFDLG1CQUEyQztRQUN0RSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBcUMsRUFBRSxFQUFFO1lBQ3BFLElBQUksaUJBQWlCLENBQUMsTUFBTSxFQUFFO2dCQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUNsRCxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQzlFO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFWSxTQUFTLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxVQUFrQjs7WUFDM0YsSUFBSSxJQUFZLENBQUM7WUFDakIsTUFBTSxVQUFVLEdBQXNDLElBQUksaUNBQWlDLEVBQUUsQ0FBQztZQUM5RixVQUFVLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztZQUN0QyxVQUFVLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztZQUNyQyxVQUFVLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQztZQUMxQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3SCxVQUFVLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDN0MsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdkcsTUFBTSxhQUFhLEdBQXdDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hFLFdBQVcsRUFBRSxhQUFhLENBQUMsU0FBUztnQkFDcEMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxXQUFXO2dCQUNwQyxhQUFhLEVBQUUsYUFBYSxZQUFZLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLGlCQUFpQjthQUNySCxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0lBRVkscUJBQXFCLENBQUMsT0FBaUI7O1lBQ2xELElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQzthQUNuQztRQUNILENBQUM7S0FBQTtJQUVPLGlDQUFpQztRQUN2QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEQsTUFBTSxTQUFTLEdBQWMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RCxNQUFNLG1CQUFtQixHQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0csSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFO3dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLDRCQUE0QixDQUFDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFOzRCQUMzRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7NEJBQzFELFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7d0JBQ2hFLENBQUMsQ0FBQyxDQUFDO3FCQUNKO3lCQUFNO3dCQUNMLFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7cUJBQy9EO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyxrQ0FBa0MsQ0FBQyxVQUF1QjtRQUNoRSxNQUFNLEdBQUcsR0FBVyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLE9BQU8sR0FBVyxFQUFFLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixNQUFNLFNBQVMsR0FBYyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Z0JBQ25ELE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUMvRDtpQkFBTTtnQkFDTCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxNQUFNLE9BQU8sRUFBRSxDQUFDO2lCQUNqRTtnQkFDRCxPQUFPLEdBQUcsRUFBRSxDQUFDO2FBQ2Q7U0FDRjtJQUNILENBQUM7SUFFTyxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxpQ0FBaUM7SUFDakMsNENBQTRDO0lBQzVDLElBQUk7SUFFSiwwREFBMEQ7SUFDMUQscUNBQXFDO0lBQ3JDLElBQUk7SUFFSSxvQkFBb0IsQ0FBQyxpQkFBcUMsRUFBRSxTQUFpQjtRQUNuRixJQUFJLGNBQXNCLENBQUM7UUFDM0IsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNoRyxjQUFjLEdBQUcsU0FBUyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNuRCxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztpQkFDdkI7Z0JBQ0QsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUM3QixTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUNuRDtnQkFDRCxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDckU7U0FDRjtRQUNLLGlCQUFrQixDQUFDLFNBQVMsR0FBRyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUN4RixJQUFJLGNBQWMsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFTyxXQUFXLENBQUMsRUFBVSxFQUFFLGNBQXNCO1FBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLDJEQUEyRDtJQUMzRCxpREFBaUQ7SUFDakQsSUFBSTtJQUVJLHFCQUFxQixDQUFDLElBQTZDO1FBQ3pFLG1CQUFtQjtRQUNuQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDcEMsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1RCxNQUFNLElBQUksR0FBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDdEQ7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzdEO0lBQ0gsQ0FBQztJQUVNLGtCQUFrQixDQUFDLFVBQW1CO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxRQUFpQztRQUMvRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtZQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsMERBQTBEO0lBQzVDLDBCQUEwQjs7WUFDdEMsTUFBTSxZQUFZLEdBQWtCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1RSxJQUFJLFlBQVksRUFBRTtnQkFDaEIsaUdBQWlHO2dCQUNqRyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNqQyxNQUFNLFdBQVcsR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1RixJQUFJLFdBQVcsRUFBRTt3QkFDVCxXQUFZLENBQUMsS0FBSyxHQUFHLDRDQUE0Qzs0QkFDL0QsV0FBWSxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLGNBQWMsSUFBVSxXQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dDQUNqRyxXQUFXLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQ0FDakQsV0FBVyxDQUFDLGNBQWMsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO3FCQUNuQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUFBO0lBRWEsYUFBYSxDQUN6QixrQkFBMEIsRUFDMUIsMkJBQW9DLEVBQ3BDLE1BQThCOztZQUU5QixNQUFNLG9CQUFvQixHQUN4QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLDJCQUEyQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlGLElBQUksQ0FBQyxLQUFLLGNBQWMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUMzQyxNQUFNLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDL0I7Z0JBQ0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtnQkFDbEQsSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtvQkFDdkcsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMscUJBQXFCLENBQUM7b0JBQ3JELG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3pELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUN6RCxDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQy9CO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLDJCQUEyQixDQUFDO2lCQUM1RDthQUNGO1lBQ0QsTUFBTSxhQUFhLEdBQVcsb0JBQW9CLENBQUMsWUFBWSxDQUFDO1lBQ2hFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4QyxDQUFDO0tBQUE7OzJIQTVtQlUsNkJBQTZCOytIQUE3Qiw2QkFBNkIsY0FGNUIsTUFBTTs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtKc29uVXRpbHNTZXJ2aWNlfSBmcm9tICcuL2pzb24tdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlfSBmcm9tICcuL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7U2tpcEJ1dHRvbkluZm9TZXJ2aWNlfSBmcm9tICcuL3NraXAtYnV0dG9uLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4vbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge2lzTmlsbH0gZnJvbSAnLi4vdXRpbHMvZnVuY3Rpb24vaXMtbmlsbC5mdW5jdGlvbic7XHJcbmltcG9ydCB7QXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlJztcclxuaW1wb3J0IHtEZWNvTm9kZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGUnO1xyXG5pbXBvcnQge0Fuc3dlcn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXInO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gJ0Bjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vaW50ZXJuYWwtcGFyYW0uZW51bSc7XHJcbmltcG9ydCB7Tm9kZVR5cGV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9ub2RlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7QW5zd2VyUHJpY2V9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYW5zd2VyLXByaWNlJztcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uJztcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvcXVlc3Rpb24tYW5kLWFuc3dlcnMnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9jb25maWd1cmF0b3Itc3RhdGlzdGljcy1lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7T3B0aW9uc30gZnJvbSAnQGNvbGlqbml0L2lvbmVjb25uZWN0b3IvYnVpbGQvbW9kZWwvb3B0aW9ucyc7XHJcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gJ0Bjb2xpam5pdC9pb25lY29ubmVjdG9yL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhJztcclxuaW1wb3J0IHtBcnRpY2xlVGV4dH0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLXRleHQuYm8nO1xyXG5pbXBvcnQge0V4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mbyc7XHJcbmltcG9ydCB7RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm9SZXF1ZXN0fSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9tb2RlbC9leHRlcm5hbC1jYXRhbG9nLXN0YXJ0dXAtaW5mby1yZXF1ZXN0JztcclxuaW1wb3J0IHtDdXN0b21GbG9vckdyb3VwUmVzdWx0fSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvcmUzZC9tb2RlbC9jdXN0b20tZmxvb3ItZ3JvdXAtcmVzdWx0JztcclxuaW1wb3J0IHtSZXN1bHRUeXBlfSBmcm9tICcuLi8uLi9wbHVnaW5zL2NvcmUzZC9lbnVtL3Jlc3VsdC10eXBlLmVudW0nO1xyXG5pbXBvcnQge0Vycm9yTWVzc2FnZX0gZnJvbSAnLi4vbW9kZWwvZXJyb3ItbWVzc2FnZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBFdmVudFNlcnZpY2V9IGZyb20gJy4vaG9tZWRlY29yYXRvci1hcHAtZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzfSBmcm9tICcuLi9tb2RlbC9ob21lZGVjb3JhdG9yLXNldHRpbmdzJztcclxuaW1wb3J0IHtHb29kVHlwZX0gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWZjb2RlL2dvb2QtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtGcm96ZW5BcnRpY2xlU2ltcGxlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Zyb3plbi1hcnRpY2xlLXNpbXBsZSc7XHJcbmltcG9ydCB7RnJvemVuQXJ0aWNsZX0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9mcm96ZW4tYXJ0aWNsZSc7XHJcbmltcG9ydCB7R29vZ2xlVGFnTWFuYWdlckV2ZW50fSBmcm9tICcuLi9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuaW1wb3J0IHtHb29nbGVUYWdNYW5hZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9nb29nbGUtdGFnLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7RXh0ZXJuYWxTb3VyY2V9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL21vZGVsL2V4dGVybmFsLXNvdXJjZS5ibyc7XHJcblxyXG4vLyBIb2xkcyBhbGwgaU9ORSBiYWNrZW5kIHJlbGF0ZWQgc3RhdGUgYW5kIG1ldGhvZHMgZm9yIGEgcnVubmluZyBIb21lRGVjb3JhdG9yLiBUbyBiZSB1c2VkIGFueXdoZXJlIGludGVybmFsbHkuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIGdldCBhcnRpY2xlKCk6IEFydGljbGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FydGljbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRlY29Ob2RlcygpOiBEZWNvTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNlbGVjdGlvbnModmFsdWU6IFNlbGVjdGlvbltdKSB7XHJcbiAgICAvLyB0ZW1wIGZpeCBmb3IgcHJpY2VzIHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuX2FydGljbGVQcmljZSA9IHZhbHVlWzBdLmFydFJldGFpbFByaWNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYXJ0aWNsZVByaWNlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGlvbnMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0aW9ucygpOiBTZWxlY3Rpb25bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNlbGVjdGlvbnMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTZWxlY3Rpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIGdldCBhY3RpdmVRdWVzdGlvbigpOiBRdWVzdGlvbiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYWN0aXZlUXVlc3Rpb247XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZUFuc3dlcnMoKTogQW5zd2VyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUFuc3dlcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZVNlbGVjdGlvbigpOiBTZWxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdG90YWxQcmljZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RvdGFsUHJpY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3VsZFNob3dMb2FkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd0xvYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2hvdWxkU2hvd0xvYWRlcih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9oaWRlTG9hZGVyVGltZW91dCk7XHJcbiAgICAgIHRoaXMuX3Nob3VsZFNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faGlkZUxvYWRlclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zaG91bGRTaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sIHRoaXMuX2hpZGVMb2FkZXJUaW1lclRpbWVvdXQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnRyb2xsZXJJbml0aWFsaXplZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGFydGljbGVSZWNlaXZlZDogU3ViamVjdDxBcnRpY2xlPiA9IG5ldyBTdWJqZWN0PEFydGljbGU+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbnNSZWNlaXZlZDogU3ViamVjdDxTZWxlY3Rpb25bXT4gPSBuZXcgU3ViamVjdDxTZWxlY3Rpb25bXT4oKTtcclxuICAvLyBwdWJsaWMgcmVhZG9ubHkgZGVjb05vZGVzUmVjZWl2ZWQ6IFN1YmplY3Q8RGVjb05vZGVbXT4gPSBuZXcgU3ViamVjdDxEZWNvTm9kZVtdPigpO1xyXG4gIHB1YmxpYyByZWFkb25seSBhbnN3ZXJDb3VudFJlY2VpdmVkOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGFuc3dlcnNSZWNlaXZlZDogU3ViamVjdDxBbnN3ZXJbXT4gPSBuZXcgU3ViamVjdDxBbnN3ZXJbXT4oKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZXh0cmFBbnN3ZXJEYXRhTG9hZGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAvLyBwdWJsaWMgcmVhZG9ubHkgbW9vZEltYWdlc1JlY2VpdmVkOiBTdWJqZWN0PHsgYW5zd2VyT3JTZWxlY3Rpb246IEFuc3dlciB8IFNlbGVjdGlvbiwgaW1hZ2VEYXRhOiBzdHJpbmcgfT4gPVxyXG4gIC8vICAgbmV3IFN1YmplY3Q8e2Fuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXJ8U2VsZWN0aW9uLCBpbWFnZURhdGE6IHN0cmluZ30+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbnNBbmREZWNvc0xpbmtlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25SZXNldDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBhc3NldFBhdGg6IHN0cmluZztcclxuICBwdWJsaWMgc2VsZWN0aW9uc1RvRGlzcGxheTogU2VsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfaGlkZUxvYWRlclRpbWVvdXQ6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9oaWRlTG9hZGVyVGltZXJUaW1lb3V0OiBudW1iZXIgPSA1MDA7XHJcbiAgcHJpdmF0ZSBfYXJ0aWNsZTogQXJ0aWNsZTtcclxuICBwcml2YXRlIF9zZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRTZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2RlY29Ob2RlczogRGVjb05vZGVbXSA9IFtdO1xyXG4gIC8vIHByaXZhdGUgX2FjdGl2ZVF1ZXN0aW9uOiBRdWVzdGlvbjtcclxuICBwcml2YXRlIF9hY3RpdmVBbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2FjdGl2ZVNlbGVjdGlvbjogU2VsZWN0aW9uO1xyXG4gIHByaXZhdGUgX2FydGljbGVQcmljZTogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfdG90YWxQcmljZTogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIF9zaG91bGRTaG93TG9hZGVyOiBib29sZWFuO1xyXG5cclxuICBwcml2YXRlIF9jb25uZWN0b3JPcHRpb25zOiBPcHRpb25zID0gbmV3IE9wdGlvbnMoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfaW1hZ2VDYWNoZTogTWFwPG51bWJlciwgc3RyaW5nPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jb25uZWN0b3I6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JBZGFwdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2pzb25VdGlsczogSnNvblV0aWxzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NraXBCdXR0b25JbmZvU2VydmljZTogU2tpcEJ1dHRvbkluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwRXZlbnRTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwRXZlbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3Q6IEV4dGVybmFsQ2F0YWxvZ1N0YXJ0dXBJbmZvUmVxdWVzdCk6IFByb21pc2U8RXh0ZXJuYWxDYXRhbG9nU3RhcnR1cEluZm8+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3IuZ2V0V2ViVmlld1N0YXJ0dXBJbmZvKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXROb2RlSW5zdGFuY2Uoc2t1OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XHJcbiAgICBjb25zdCByZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuaW5pdE5vZGVJbnN0YW5jZShnb29kSWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZUluc3RhbmNlUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZDogc3RyaW5nLCBvbGRDb25uZWN0aW9uOiBzdHJpbmcsIG5ld0Nvbm5lY3Rpb246IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmNoYW5nZUNvbm5lY3Rpb24oaW5zdGFuY2VJZCwgb2xkQ29ubmVjdGlvbiwgbmV3Q29ubmVjdGlvbik7XHJcbiAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZW1wdHlTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZGVjb05vZGVzLmxlbmd0aCA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIGZvciBvYnNvbGV0ZSBmdXJuaXR1cmVcclxuICAgKiBAcGFyYW0gc2VsZWN0aW9uc1xyXG4gICAqIEBwYXJhbSBleHRyYUluZm9cclxuICAgKi9cclxuICBwdWJsaWMgc2V0U2VsZWN0aW9ucyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSwgZXh0cmFJbmZvOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgLy8gdGhpcy5fb25TZWxlY3Rpb25zUmVjZWl2ZWQoc2VsZWN0aW9ucywgZXh0cmFJbmZvKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zKHNlbGVjdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCBmb3Igb2Jzb2xldGUgZnVybml0dXJlXHJcbiAgICogQHBhcmFtIGRlY29Ob2Rlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXREZWNvTm9kZXMoZGVjb05vZGVzOiBEZWNvTm9kZVtdKSB7XHJcbiAgICB0aGlzLl9kZWNvTm9kZXMgPSBkZWNvTm9kZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgaW5pdENvbm5lY3Rpb24oZm9yY2VSZWxvYWQ/OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoKHRoaXMuX2luaXRpYWxpemVkIHx8IHRoaXMuX2luaXRpYWxpemluZykgJiYgIWZvcmNlUmVsb2FkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2luaXRpYWxpemluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzZXR0aW5nczogSG9tZWRlY29yYXRvclNldHRpbmdzID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzO1xyXG4gICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1NldHRpbmdzIGFyZSBub3QgZGVmaW5lZCEnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9jb25uZWN0b3JPcHRpb25zID0gT2JqZWN0LmFzc2lnbihuZXcgT3B0aW9ucygpLCBzZXR0aW5ncyk7XHJcblxyXG4gICAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yLnNob3dMb2FkZXIuc3Vic2NyaWJlKHNob3dMb2FkZXIgPT4gdGhpcy5vblNob3dMb2FkZXJDaGFuZ2Uoc2hvd0xvYWRlcikpLFxyXG4gICAgICAgIHRoaXMuX2Nvbm5lY3Rvci5jb25uZWN0aW9uUmVzZXQuc3Vic2NyaWJlKCgpID0+IHRoaXMub25Db25uZWN0aW9uUmVzZXQoKSksXHJcbiAgICAgICAgLy8gdGhpcy5fbWVzc2FnZVNlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLkFkZFRvQ2FydCwgKCkgPT4gdGhpcy5hZGRUb0NhcnQoKSlcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluaXRDb25uZWN0b3IodGhpcy5fY29ubmVjdG9yT3B0aW9ucywgdW5kZWZpbmVkLCBmb3JjZVJlbG9hZCk7XHJcbiAgICAgIC8vIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZXNzaW9uID0gdGhpcy5fY29ubmVjdG9yT3B0aW9ucy5zZXNzaW9uO1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXJJbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2luaXRpYWxpemluZyA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLl9pbml0aWFsaXppbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbnRlcm5hbFBhcmFtZXRlcihwYXJhbTogSW50ZXJuYWxQYXJhbSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldEludGVybmFsUGFyYW1ldGVyKHBhcmFtKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZDogbnVtYmVyLCBnb29kVHlwZTogc3RyaW5nLCBxdWFudGl0eTogbnVtYmVyLFxyXG4gICAgICBzaG93TG9hZGVyOiBib29sZWFuID0gdHJ1ZSwgaW5zdGFuY2VJZD86IG51bWJlciwgY29uZmlndXJhdG9yU3RhdGlzdGljcz86IENvbmZpZ3VyYXRvclN0YXRpc3RpY3NFbnZpcm9ubWVudCk6IFByb21pc2U8YW55PiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRKc29uQ29uZmlndXJlZEFydGljbGVzKGdvb2RJZCwgZ29vZFR5cGUsIHF1YW50aXR5LCBzaG93TG9hZGVyLCBpbnN0YW5jZUlkLCBjb25maWd1cmF0b3JTdGF0aXN0aWNzKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpYyBnZXRKc29uTWF0Y2hUYWJsZUFydGljbGVzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldEpzb25NYXRjaFRhYmxlQXJ0aWNsZXMoKTtcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRJbnN0YW5jZShpZDogc3RyaW5nKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLnNldEluc3RhbmNlVG9Db25maWd1cmUoaWQpLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICByZXR1cm4gbmV3IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5SW5zdGFuY2VBbmRTYXZlT3JpZ2luYWxDb25maWd1cmF0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb3B5SW5zdGFuY2UoaW5zdGFuY2VJZCwgdHJ1ZSwgcmVzdWx0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb3B5SW5zdGFuY2VBbmRMb3NlT3JpZ2luYWxDb25maWd1cmF0aW9uKGluc3RhbmNlSWQ6IHN0cmluZywgcmVzdWx0OiBDdXN0b21GbG9vckdyb3VwUmVzdWx0KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb3B5SW5zdGFuY2UoaW5zdGFuY2VJZCwgZmFsc2UsIHJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZUNvbmZpZ3VyYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5zYXZlQ29uZmlndXJhdGlvbnMoKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvciBzYXZpbmcgY29uZmlndXJhdGlvbnMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlKHNrdTogc3RyaW5nLCBicmFuY2g6IHN0cmluZyk6IFByb21pc2U8QXJ0aWNsZT4ge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zID0gW107XHJcbiAgICB0aGlzLl9kZWNvTm9kZXMgPSBbXTtcclxuICAgIGNvbnN0IGFydGljbGU6IEFydGljbGUgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0QXJ0aWNsZShza3UsIGJyYW5jaClcclxuICAgICAgLmNhdGNoKGUgPT4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLmFydGljbGVSZWNlaXZlZC5uZXh0KGFydGljbGUpO1xyXG4gICAgcmV0dXJuIGFydGljbGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TW9vZEltYWdlRm9yQW5zd2VyU2VsZWN0aW9uKGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24sIHRodW1iTmFpbDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRNb29kSW1hZ2VGb3JBbnN3ZXJTZWxlY3Rpb24oYW5zd2VyT3JTZWxlY3Rpb24sIHRodW1iTmFpbCk7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgbG9hZFNlbGVjdGlvbnMoKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLnNlbGVjdGlvbnMubGVuZ3RoID0gMDtcclxuICAvLyAgIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheS5sZW5ndGggPSAwO1xyXG4gIC8vICAgdGhpcy5fY29ubmVjdG9yLmxvYWRTZWxlY3Rpb25zKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBwdWJsaWMgZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5fY29ubmVjdG9yLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gIC8vIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFF1ZXN0aW9uQW5kQW5zd2Vyc0FzeW5jKCk6IFByb21pc2U8UXVlc3Rpb25BbmRBbnN3ZXJzPiB7XHJcbiAgICBjb25zdCBxdWVzdGlvbkFuZEFuc3dlcnM6IFF1ZXN0aW9uQW5kQW5zd2VycyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRRdWVzdGlvbkFuZEFuc3dlcnNBc3luYygpO1xyXG4gICAgcXVlc3Rpb25BbmRBbnN3ZXJzLmFuc3dlcnMgPSBxdWVzdGlvbkFuZEFuc3dlcnMuYW5zd2Vycy5maWx0ZXIoYSA9PiB0aGlzLl9pc0Fuc3dlclB1Ymxpc2hlZChhKSk7XHJcbiAgICByZXR1cm4gcXVlc3Rpb25BbmRBbnN3ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFNlbGVjdGlvbnNBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheS5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA9IDA7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRTZWxlY3Rpb25zQXN5bmMoKVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9ucyhzZWxlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXREZWNvc0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZGVjb05vZGVzID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlY29zQXN5bmMoKVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0QW5zd2VyKGFuc3dlcjogQW5zd2VyLCBpbnB1dD86IHN0cmluZyk6IFByb21pc2U8RGF0YVNlcnZpY2VSZXNwb25zZURhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb25uZWN0b3Iuc2VsZWN0QW5zd2VyKGFuc3dlciwgaW5wdXQpO1xyXG4gICAgLy8gdGhpcy5zZWxlY3RBbnN3ZXJDYWxsZWQubmV4dChhbnN3ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbEFuc3dlcihnZXRBbnN3ZXJzQW5kUXVlc3Rpb246IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5jYW5jZWxBbnN3ZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RTZWxlY3Rpb24oXHJcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbiwgZm9yY2VCYWNrVG9Ob2RlPzogYm9vbGVhbiwgYWZ0ZXI/OiBib29sZWFuLCBjb25uZWN0b3I/OiBzdHJpbmcpOiBQcm9taXNlPERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhPiB7XHJcbiAgICB0aGlzLl9hY3RpdmVTZWxlY3Rpb24gPSBzZWxlY3Rpb247XHJcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLnNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sIGZvcmNlQmFja1RvTm9kZSwgYWZ0ZXIsIGNvbm5lY3Rvcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5kZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uKTogUHJvbWlzZTxEYXRhU2VydmljZVJlc3BvbnNlRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5yZXBsYWNlU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0QW5zd2VySW5mbyhhbnN3ZXI6IEFuc3dlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYXJ0aWNsZVRleHRzOiBBcnRpY2xlVGV4dFtdID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEFuc3dlckluZm8oYW5zd2VyKTtcclxuICAgIHRoaXMuX29uQW5zd2VySW5mb1JlY2VpdmVkKHthbnN3ZXI6IGFuc3dlciwgaW5mbzogYXJ0aWNsZVRleHRzfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXh0ZW5kV2l0aEFuc3dlclRleHRBbmRJbWFnZShhbnN3ZXI6IEFuc3dlciwgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChhbnN3ZXIubm9kZUlkKSB7XHJcbiAgICAgIGlmICghdGhpcy5faW1hZ2VDYWNoZS5oYXMoYW5zd2VyLm5vZGVJZCkpIHtcclxuICAgICAgICB0aGlzLl9jb25uZWN0b3IuZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihhbnN3ZXIsIDQsIHRydWUsIHNob3dMb2FkZXIpLnRoZW4oKGltYWdlRGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9oYW5kbGVJbWFnZVJlY2VpdmVkKGFuc3dlciwgaW1hZ2VEYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhbnN3ZXIuaW1hZ2VEYXRhID0gdGhpcy5faW1hZ2VDYWNoZS5nZXQoYW5zd2VyLm5vZGVJZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NraXBCdXR0b25JbmZvU2VydmljZS5nZXRTa2lwQnV0dG9uSW1hZ2VBbmRUZXh0KGFuc3dlci5nb29kSWQpLnRoZW4oKHRleHRBbmRJbWFnZSkgPT4ge1xyXG4gICAgICAgIGFuc3dlci5hbnN3ZXIgPSB0ZXh0QW5kSW1hZ2UudGV4dDtcclxuICAgICAgICBhbnN3ZXIuY29tbWVyY2lhbEFuc3dlciA9IHRleHRBbmRJbWFnZS50ZXh0O1xyXG4gICAgICAgIGFuc3dlci5pbWFnZURhdGEgPSB0ZXh0QW5kSW1hZ2UuaW1hZ2VCb2R5O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBleHRlbmRXaXRoU2VsZWN0aW9uSW1hZ2Uoc2VsZWN0aW9uOiBTZWxlY3Rpb24sIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoc2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKHNlbGVjdGlvbi5ub2RlSWQpKSB7XHJcbiAgICAgICAgdGhpcy5fY29ubmVjdG9yLmdldEltYWdlRm9yQW5zd2VyT3JTZWxlY3Rpb24oc2VsZWN0aW9uLCA0LCB0cnVlLCBzaG93TG9hZGVyKS50aGVuKChpbWFnZURhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5faGFuZGxlSW1hZ2VSZWNlaXZlZChzZWxlY3Rpb24sIGltYWdlRGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLmltYWdlRGF0YSA9IHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHNlbGVjdGlvbi5ub2RlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5SW1hZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNTZWxlY3Rpb25QdWJsaXNoZWQoc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSA9PT0gMiB8fFxyXG4gICAgICAoKGlzTmlsbChzZWxlY3Rpb24uaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlKSB8fCAoKHNlbGVjdGlvbi5oaWVyYXJjaGljYWxQdWJsaWNhdGlvbkNvZGUgJiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSkgPiAwKSkgJiZcclxuICAgICAgKFxyXG4gICAgICAgIChzZWxlY3Rpb24ubm9kZVR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmICgoKHNlbGVjdGlvbi5xdWVzdGlvblB1YmxpY2F0aW9uQ29kZSAmIHRoaXMuX2dldFB1YmxpY2F0aW9uQ29kZSgpKSA+IDApIHx8XHJcbiAgICAgICAgICBpc05pbGwoc2VsZWN0aW9uLnF1ZXN0aW9uUHVibGljYXRpb25Db2RlKSkpIHx8XHJcbiAgICAgICAgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmICgoKHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUgJiB0aGlzLl9nZXRQdWJsaWNhdGlvbkNvZGUoKSkgPiAwKSB8fFxyXG4gICAgICAgICAgaXNOaWxsKHNlbGVjdGlvbi5hbnN3ZXJQdWJsaWNhdGlvbkNvZGUpKSlcclxuICAgICAgKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9ucyhzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25zID0gc2VsZWN0aW9ucy5zbGljZSgwKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5KCk7XHJcbiAgICBsZXQgdG90YWxQcmljZSA9IDA7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0aW9ucykge1xyXG4gICAgICB0aGlzLl9zZWxlY3Rpb25zLmZvckVhY2goc2VsZWN0aW9uID0+IHtcclxuICAgICAgICB0b3RhbFByaWNlICs9IHNlbGVjdGlvbi5hcnRSZXRhaWxQcmljZSA/IHNlbGVjdGlvbi5hcnRSZXRhaWxQcmljZSA6IDA7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdG90YWxQcmljZSA9IE1hdGgucm91bmQoKHRvdGFsUHJpY2UgKyBOdW1iZXIuRVBTSUxPTikgKiAxMDApIC8gMTAwO1xyXG4gICAgdGhpcy5fY3VycmVudFNlbGVjdGlvbnMgPSB0aGlzLnNlbGVjdGlvbnMuc2xpY2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJlcGFyZUFuc3dlcnNBbmRJbWFnZXModGhpcy5zZWxlY3Rpb25zKTtcclxuICAgIGNvbnN0IGFsbFNlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gdGhpcy5zZWxlY3Rpb25zLmZpbHRlcihzID0+IHRoaXMuX2lzU2VsZWN0aW9uUHVibGlzaGVkKHMpKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheSA9IGFsbFNlbGVjdGlvbnMuZmlsdGVyKHMgPT4gcy5ub2RlVHlwZSAhPT0gTm9kZVR5cGUuQXJ0aWNsZSAmJiBzLnByZXNlbnRhdGlvbkxldmVsID09PSAxKTtcclxuICAgIHRoaXMuc2VsZWN0aW9uc1JlY2VpdmVkLm5leHQodGhpcy5zZWxlY3Rpb25zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVBbnN3ZXJzQW5kSW1hZ2VzKHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2ldO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlU2VsZWN0aW9uQW5zd2VycyhzZWxlY3Rpb24sIHNlbGVjdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wcmVsb2FkQ2FjaGVkSW1hZ2VzKHRoaXMuc2VsZWN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWxlY3Rpb25BbnN3ZXJzKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgY29uc3QgYW5zd2Vyc0Zyb21TZWxlY3Rpb246IFNlbGVjdGlvbltdID0gc2VsZWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgcyA9PiBzLnBhcmVudEFydE5vZGVJZERlY28gJiYgc2VsZWN0aW9uLm5vZGVJZCAmJiBzLnBhcmVudEFydE5vZGVJZERlY28udG9TdHJpbmcoKSA9PT0gc2VsZWN0aW9uLm5vZGVJZC50b1N0cmluZygpKTtcclxuICAgIHRoaXMuX3ByZXBhcmVTZWxlY3Rpb25zTmV4dE9wdGlvblZhbHVlcyhhbnN3ZXJzRnJvbVNlbGVjdGlvbik7XHJcbiAgICBzZWxlY3Rpb24ubGFzdEFuc3dlciA9IChhbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggPiAwKSAmJiBhbnN3ZXJzRnJvbVNlbGVjdGlvblthbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggLSAxXS5hbnN3ZXIgP1xyXG4gICAgICBhbnN3ZXJzRnJvbVNlbGVjdGlvblthbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggLSAxXS5hbnN3ZXIudHJpbSgpIDpcclxuICAgICAgJyc7XHJcbiAgICBzZWxlY3Rpb24ubGFzdEFuc3dlck5vZGVJZCA9IGFuc3dlcnNGcm9tU2VsZWN0aW9uLmxlbmd0aCA+IDAgPyBhbnN3ZXJzRnJvbVNlbGVjdGlvblthbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggLSAxXS5ub2RlSWQgOiB1bmRlZmluZWQ7XHJcbiAgICBsZXQgYW5zd2VyVHJlZTogYW55O1xyXG4gICAgbGV0IGFuc3dlclRyZWVTdHJpbmc6IHN0cmluZztcclxuICAgIGlmIChhbnN3ZXJzRnJvbVNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlclRyZWUgPSBhbnN3ZXJzRnJvbVNlbGVjdGlvblxyXG4gICAgICAgIC5maWx0ZXIocyA9PiB0aGlzLl9pc1NlbGVjdGlvblB1Ymxpc2hlZChzKSB8fCBzLnVzZXJJbnB1dClcclxuICAgICAgICAubWFwKChzOiBTZWxlY3Rpb24sIGlkeDogbnVtYmVyLCBhcnI6IFNlbGVjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aXRsZTogcy51c2VySW5wdXQgPyAocy5hbnN3ZXIgPyBzLmFuc3dlci50cmltKCkgOiAnJykgOiAocy5xdWVzdGlvbiA/IHMucXVlc3Rpb24udHJpbSgpIDogJycpLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogcy5hbnN3ZXJUcmVlU3RyaW5nID8gcy5hbnN3ZXJUcmVlU3RyaW5nIDogKHMudXNlcklucHV0ID8gKHMudXNlcklucHV0VmFsdWUgPyBzLnVzZXJJbnB1dFZhbHVlLnRyaW0oKSA6ICcnKSA6IChzLmFuc3dlciA/IHMuYW5zd2VyLnRyaW0oKSA6ICcnKSksXHJcbiAgICAgICAgICAgIHByaWNlOiBzLmFydFJldGFpbFByaWNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICBhbnN3ZXJUcmVlU3RyaW5nID0gYW5zd2Vyc0Zyb21TZWxlY3Rpb25cclxuICAgICAgICAuZmlsdGVyKHMgPT4gdGhpcy5faXNBbGxTZWxlY3Rpb25QdWJsaXNoZWQocykgfHwgcy51c2VySW5wdXQpXHJcbiAgICAgICAgLm1hcCgoczogU2VsZWN0aW9uLCBpZHg6IG51bWJlciwgYXJyOiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcy51c2VySW5wdXQgPyAocy51c2VySW5wdXRWYWx1ZSA/IHMudXNlcklucHV0VmFsdWUudHJpbSgpIDogJycpIDogKHMuYW5zd2VyID8gcy5hbnN3ZXIudHJpbSgpIDogJycpXHJcbiAgICAgICAgfSkuam9pbignIC0gJyk7XHJcbiAgICB9XHJcbiAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZVN0cmluZyA9IGFuc3dlclRyZWVTdHJpbmc7XHJcbiAgICBpZiAoYW5zd2VyVHJlZSkge1xyXG4gICAgICBzZWxlY3Rpb24uYW5zd2VyVHJlZSA9IEpTT04uc3RyaW5naWZ5KGFuc3dlclRyZWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0aW9uLmFuc3dlclRyZWUgPSBKU09OLnN0cmluZ2lmeShbe1xyXG4gICAgICAgIHRpdGxlOiBzZWxlY3Rpb24udXNlcklucHV0ID8gKHNlbGVjdGlvbi5hbnN3ZXIgPyBzZWxlY3Rpb24uYW5zd2VyLnRyaW0oKSA6ICcnKSA6IChzZWxlY3Rpb24ucXVlc3Rpb24gPyBzZWxlY3Rpb24ucXVlc3Rpb24udHJpbSgpIDogJycpLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3Rpb24udXNlcklucHV0ID8gKHNlbGVjdGlvbi51c2VySW5wdXRWYWx1ZSA/IHNlbGVjdGlvbi51c2VySW5wdXRWYWx1ZS50cmltKCkgOiAnJykgOiAoc2VsZWN0aW9uLmFuc3dlciA/IHNlbGVjdGlvbi5hbnN3ZXIudHJpbSgpIDogJycpLFxyXG4gICAgICAgIHByaWNlOiBzZWxlY3Rpb24uYXJ0UmV0YWlsUHJpY2VcclxuICAgICAgfV0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHRvdGFsUHJpY2U6IG51bWJlciA9IDA7IC8vIHRlbXAgZml4IHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgIGFuc3dlcnNGcm9tU2VsZWN0aW9uLmZvckVhY2goKHM6IFNlbGVjdGlvbikgPT4ge1xyXG4gICAgICB0b3RhbFByaWNlICs9IHMuYXJ0UmV0YWlsUHJpY2UgPyBzLmFydFJldGFpbFByaWNlIDogMDsgLy8gdGVtcCBmaXggdW50aWwgYmFja2VuZCBpcyByZWFkeVxyXG4gICAgfSk7XHJcbiAgICAoc2VsZWN0aW9uIGFzIGFueSkudG90YWxQcmljZSA9IHRvdGFsUHJpY2U7IC8vIHRlbXAgZml4IHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VsZWN0aW9uUHVibGlzaGVkKHM6IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5RdWVzdGlvbiAmJiAoKChzLm9wdGlvblNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKHMub3B0aW9uU2hvd09uKSkpIHx8XHJcbiAgICAgICAgKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJiAoKChzLm5vZGVTaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm5vZGVTaG93T24pKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0FsbFNlbGVjdGlvblB1Ymxpc2hlZChzOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiAocy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuUXVlc3Rpb24gJiYgKCgocy5vcHRpb25TaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm9wdGlvblNob3dPbikpKSB8fFxyXG4gICAgICAgIChzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5OZXh0T3B0aW9uVmFsdWUgJiYgKCgocy5ub2RlU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwocy5ub2RlU2hvd09uKSkpIHx8XHJcbiAgICAgICAgKHMubm9kZVR5cGUgPT09IE5vZGVUeXBlLkFuc3dlciAmJiAoKChzLm5vZGVTaG93T24gJiAyMDk3MTUyKSA+IDApIHx8IGlzTmlsbChzLm5vZGVTaG93T24pKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc0Fuc3dlclB1Ymxpc2hlZChhOiBBbnN3ZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoaXNOaWxsKGEuaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlKSB8fCAoKGEuaGllcmFyY2hpY2FsUHVibGljYXRpb25Db2RlICYgdGhpcy5fZ2V0UHVibGljYXRpb25Db2RlKCkpID4gMCkpLyogJiZcclxuICAgICAgICAoXHJcbiAgICAgICAgICAgIChhLnR5cGUgPT09IE5vZGVUeXBlLlF1ZXN0aW9uICYmICgoKGEub3B0aW9uU2hvd09uICYgMjA5NzE1MikgPiAwKSB8fCBpc05pbGwoYS5vcHRpb25TaG93T24pKSkgfHxcclxuICAgICAgICAgICAgKGEudHlwZSA9PT0gTm9kZVR5cGUuQW5zd2VyICYmICgoKGEubm9kZVNob3dPbiAmIDIwOTcxNTIpID4gMCkgfHwgaXNOaWxsKGEubm9kZVNob3dPbikpKVxyXG4gICAgICAgICkqLztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZWxvYWRDYWNoZWRJbWFnZXMoYW5zd2Vyc09yU2VsZWN0aW9uczogQW5zd2VyW10gfCBTZWxlY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgYW5zd2Vyc09yU2VsZWN0aW9ucy5mb3JFYWNoKChhbnN3ZXJPclNlbGVjdGlvbjogQW5zd2VyIHwgU2VsZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmIChhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQpIHtcclxuICAgICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMoYW5zd2VyT3JTZWxlY3Rpb24ubm9kZUlkKSkge1xyXG4gICAgICAgICAgYW5zd2VyT3JTZWxlY3Rpb24uaW1hZ2VEYXRhID0gdGhpcy5faW1hZ2VDYWNoZS5nZXQoYW5zd2VyT3JTZWxlY3Rpb24ubm9kZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGFkZFRvQ2FydChnb29kSWQ6IG51bWJlciwgZ29vZFR5cGU6IHN0cmluZywgcXVhbnRpdHk6IG51bWJlciwgaW5zdGFuY2VJZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGxldCBqc29uOiBzdHJpbmc7XHJcbiAgICBjb25zdCBzdGF0aXN0aWNzOiBDb25maWd1cmF0b3JTdGF0aXN0aWNzRW52aXJvbm1lbnQgPSBuZXcgQ29uZmlndXJhdG9yU3RhdGlzdGljc0Vudmlyb25tZW50KCk7XHJcbiAgICBzdGF0aXN0aWNzLnVzZXJUeXBlID0gJ0hvbWVkZWNvcmF0b3InO1xyXG4gICAgc3RhdGlzdGljcy50cmFuc2FjdGlvblR5cGUgPSAnU2FsZXMnO1xyXG4gICAgc3RhdGlzdGljcy5hY3Rpb25Eb21haW4gPSAnSG9tZWRlY29yYXRvcic7XHJcbiAgICBzdGF0aXN0aWNzLnNlc3Npb25JZCA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZXNzaW9uID8gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlc3Npb24uc2Vzc2lvbklkIDogJ3Vua25vd24nO1xyXG4gICAgc3RhdGlzdGljcy53ZWJIb3N0ID0gd2luZG93LmxvY2F0aW9uLmhvc3Q7XHJcbiAgICBzdGF0aXN0aWNzLmJ1bmRsZUhvc3QgPSB3aW5kb3cubG9jYXRpb24uaG9zdDtcclxuICAgIGpzb24gPSBhd2FpdCB0aGlzLmdldEpzb25Db25maWd1cmVkQXJ0aWNsZXMoZ29vZElkLCBnb29kVHlwZSwgcXVhbnRpdHksIGZhbHNlLCBpbnN0YW5jZUlkLCBzdGF0aXN0aWNzKTtcclxuICAgIGNvbnN0IGZyb3plbkFydGljbGU6IEZyb3plbkFydGljbGVTaW1wbGUgfCBGcm96ZW5BcnRpY2xlID0gSlNPTi5wYXJzZShqc29uKTtcclxuICAgIHRoaXMuX2dvb2dsZVRhZ01hbmFnZXIuc2VuZEV2ZW50KEdvb2dsZVRhZ01hbmFnZXJFdmVudC5BZGRUb0NhcnQsIHtcclxuICAgICAgJ2FydGljbGVOcic6IGZyb3plbkFydGljbGUuYXJ0aWNsZU5yLFxyXG4gICAgICAncHJvZHVjdCc6IGZyb3plbkFydGljbGUuYXJ0aWNsZU5hbWUsXHJcbiAgICAgICdjb21wb3NpdGlvbic6IGZyb3plbkFydGljbGUgaW5zdGFuY2VvZiBGcm96ZW5BcnRpY2xlID8gZnJvemVuQXJ0aWNsZS5jb21wb3NpdGlvbnMgOiBmcm96ZW5BcnRpY2xlLmNvbmZpZ3VyYXRpb25UZXh0XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLkFydGljbGVDcmVhdGVkLCBqc29uKTtcclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGhhbmRsZUFuc3dlcnNSZWNlaXZlZChhbnN3ZXJzOiBBbnN3ZXJbXSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fYWN0aXZlQW5zd2VycyA9IGFuc3dlcnM7XHJcbiAgICB0aGlzLmFuc3dlckNvdW50UmVjZWl2ZWQubmV4dCh0aGlzLl9hY3RpdmVBbnN3ZXJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLl9wcmVsb2FkQ2FjaGVkSW1hZ2VzKGFuc3dlcnMpO1xyXG4gICAgdGhpcy5hbnN3ZXJzUmVjZWl2ZWQubmV4dChhbnN3ZXJzKTtcclxuICAgIGlmICh0aGlzLl9hY3RpdmVBbnN3ZXJzKSB7XHJcbiAgICAgIHRoaXMuX2xvYWRQcmljZXNPZkFjdGl2ZUFuc3dlcnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ByZXBhcmVTZWxlY3Rpb25zVG9EaXNwbGF5SW1hZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheSAmJiB0aGlzLnNlbGVjdGlvbnNUb0Rpc3BsYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0aW9uc1RvRGlzcGxheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25zVG9EaXNwbGF5W2ldO1xyXG4gICAgICAgIGNvbnN0IGxhc3RBbnN3ZXJTZWxlY3Rpb246IFNlbGVjdGlvbiA9IHRoaXMuX3NlbGVjdGlvbnMuZmluZChzID0+IHMubm9kZUlkID09PSBzZWxlY3Rpb24ubGFzdEFuc3dlck5vZGVJZCk7XHJcbiAgICAgICAgaWYgKGxhc3RBbnN3ZXJTZWxlY3Rpb24gJiYgKHNlbGVjdGlvbi5nZW5lcmljIHx8IHNlbGVjdGlvbi5ncm91cGVkKSkge1xyXG4gICAgICAgICAgaWYgKCFsYXN0QW5zd2VyU2VsZWN0aW9uLmltYWdlRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25uZWN0b3IuZ2V0SW1hZ2VGb3JBbnN3ZXJPclNlbGVjdGlvbihsYXN0QW5zd2VyU2VsZWN0aW9uLCA0LCB0cnVlLCBmYWxzZSkudGhlbigoaW1hZ2VEYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVJbWFnZVJlY2VpdmVkKGxhc3RBbnN3ZXJTZWxlY3Rpb24sIGltYWdlRGF0YSk7XHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uLmltYWdlRGF0YUxhc3RBbnN3ZXIgPSBsYXN0QW5zd2VyU2VsZWN0aW9uLmltYWdlRGF0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uaW1hZ2VEYXRhTGFzdEFuc3dlciA9IGxhc3RBbnN3ZXJTZWxlY3Rpb24uaW1hZ2VEYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlcGFyZVNlbGVjdGlvbnNOZXh0T3B0aW9uVmFsdWVzKHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBsZW46IG51bWJlciA9IHNlbGVjdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgIGxldCBub3ZUZXh0OiBzdHJpbmcgPSAnJztcclxuICAgIGZvciAobGV0IGkgPSBsZW47IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbjogU2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpXTtcclxuICAgICAgaWYgKHNlbGVjdGlvbi5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuTmV4dE9wdGlvblZhbHVlKSB7XHJcbiAgICAgICAgbm92VGV4dCA9IHNlbGVjdGlvbi5hbnN3ZXIgKyAobm92VGV4dCA/IGAgLSAke25vdlRleHR9YCA6ICcnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobm92VGV4dCkge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLmFuc3dlclRyZWVTdHJpbmcgPSBgJHtzZWxlY3Rpb24uYW5zd2VyfSAtICR7bm92VGV4dH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub3ZUZXh0ID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFB1YmxpY2F0aW9uQ29kZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRQdWJsaWNhdGlvbkNvZGVCYXNlZE9uTG9naW4oKTtcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgX29uRGVjb05vZGVzUmVjZWl2ZWQoZGVjb05vZGVzOiBEZWNvTm9kZVtdKTogdm9pZCB7XHJcbiAgLy8gICB0aGlzLl9kZWNvTm9kZXMgPSBkZWNvTm9kZXM7XHJcbiAgLy8gICB0aGlzLmRlY29Ob2Rlc1JlY2VpdmVkLm5leHQoZGVjb05vZGVzKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHByaXZhdGUgX29uUXVlc3Rpb25SZWNlaXZlZChxdWVzdGlvbjogUXVlc3Rpb24pOiB2b2lkIHtcclxuICAvLyAgIHRoaXMuX2FjdGl2ZVF1ZXN0aW9uID0gcXVlc3Rpb247XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVJbWFnZVJlY2VpdmVkKGFuc3dlck9yU2VsZWN0aW9uOiBBbnN3ZXIgfCBTZWxlY3Rpb24sIGltYWdlRGF0YTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgaW1hZ2VEYXRhT3JVcmw6IHN0cmluZztcclxuICAgIGlmIChpbWFnZURhdGEpIHtcclxuICAgICAgaWYgKGltYWdlRGF0YS5tYXRjaCgvZGF0YTppbWFnZS8pIHx8IGltYWdlRGF0YS5zdGFydHNXaXRoKCdodHRwJykgfHwgaW1hZ2VEYXRhLnN0YXJ0c1dpdGgoJ3d3dycpKSB7XHJcbiAgICAgICAgaW1hZ2VEYXRhT3JVcmwgPSBpbWFnZURhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXNzZXRQYXRoICYmICF0aGlzLmFzc2V0UGF0aC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICB0aGlzLmFzc2V0UGF0aCArPSAnLyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbWFnZURhdGEuc3RhcnRzV2l0aCgnLycpKSB7XHJcbiAgICAgICAgICBpbWFnZURhdGEgPSBpbWFnZURhdGEuc3Vic3RyKDEsIGltYWdlRGF0YS5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbWFnZURhdGFPclVybCA9ICh0aGlzLmFzc2V0UGF0aCA/IHRoaXMuYXNzZXRQYXRoIDogJycpICsgaW1hZ2VEYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAoPGFueT5hbnN3ZXJPclNlbGVjdGlvbikuaW1hZ2VEYXRhID0gaW1hZ2VEYXRhT3JVcmwgPT09IHVuZGVmaW5lZCA/ICcnIDogaW1hZ2VEYXRhT3JVcmw7XHJcbiAgICBpZiAoaW1hZ2VEYXRhT3JVcmwpIHtcclxuICAgICAgdGhpcy5fY2FjaGVJbWFnZShhbnN3ZXJPclNlbGVjdGlvbi5ub2RlSWQsIGltYWdlRGF0YU9yVXJsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhY2hlSW1hZ2UoaWQ6IG51bWJlciwgaW1hZ2VEYXRhT3JVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5zZXQoaWQsIGltYWdlRGF0YU9yVXJsKTtcclxuICB9XHJcblxyXG4gIC8vIHdpbGwgYmUgdXNlZC9pbXBsZW1lbnRlZCBsYXRlciBvbiwgb24gdGhlIHByb2R1Y3QgZGV0YWlsIHBhZ2VcclxuICAvLyBwcml2YXRlIF9vbk1vb2RJbWFnZVJlY2VpdmVkKG1vb2RJbWFnZURhdGE6IGFueSk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5tb29kSW1hZ2VzUmVjZWl2ZWQubmV4dChtb29kSW1hZ2VEYXRhKTtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgX29uQW5zd2VySW5mb1JlY2VpdmVkKGRhdGE6IHsgYW5zd2VyOiBBbnN3ZXIsIGluZm86IEFydGljbGVUZXh0W10gfSk6IHZvaWQge1xyXG4gICAgLy8gQHRvZG8gY2hlY2sgdGhpc1xyXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5hbnN3ZXIgJiYgZGF0YS5pbmZvKSB7XHJcbiAgICAgIGxldCBpbmZvTWVzc2FnZSA9ICcnO1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuOiBudW1iZXIgPSBkYXRhLmluZm8ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpbmZvOiBBcnRpY2xlVGV4dCA9IGRhdGEuaW5mb1tpXTtcclxuICAgICAgICBpbmZvTWVzc2FnZSArPSBpbmZvLmRlc2NyaXB0aW9uICsgJ1xcblxcbicgKyBpbmZvLnRleHQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmFydGljbGVJbmZvUmVjZWl2ZWQubmV4dChpbmZvTWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TaG93TG9hZGVyQ2hhbmdlKHNob3dMb2FkZXI6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3Nob3VsZFNob3dMb2FkZXIgPSBzaG93TG9hZGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ29ubmVjdGlvblJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25uZWN0aW9uUmVzZXQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSW5zdGFuY2VSZXNwb25zZShyZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSB7XHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdCAmJiByZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5fYXBwRXZlbnRTZXJ2aWNlLmluc3RhbmNlU2V0Lm5leHQocmVzcG9uc2UucmVzdWx0T2JqZWN0KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8vIFBPU1RDT05ESVRJT046IGN1cnJlbnQgYWN0aXZlQW5zd2VycyBoYXZlIHByaWNlIHZhbHVlcy5cclxuICBwcml2YXRlIGFzeW5jIF9sb2FkUHJpY2VzT2ZBY3RpdmVBbnN3ZXJzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgYW5zd2VyUHJpY2VzOiBBbnN3ZXJQcmljZVtdID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEFuc3dlclByaWNlcygpO1xyXG4gICAgaWYgKGFuc3dlclByaWNlcykge1xyXG4gICAgICAvLyBwYXN0ZSBwcmljZSBkYXRhIG9udG8gb3VyIGN1cnJlbnQgYW5zd2VyIG9iamVjdHM7IEFuc3dlclByaWNlLnNlbElkIGNvcnJlc3BvbmRzIHRvIEFuc3dlci5ub2RlXHJcbiAgICAgIGFuc3dlclByaWNlcy5mb3JFYWNoKGFuc3dlclByaWNlID0+IHtcclxuICAgICAgICBjb25zdCBhbnN3ZXJNYXRjaDogQW5zd2VyID0gdGhpcy5fYWN0aXZlQW5zd2Vycy5maW5kKGFucyA9PiBhbnMubm9kZSA9PT0gYW5zd2VyUHJpY2Uuc2VsSWQpO1xyXG4gICAgICAgIGlmIChhbnN3ZXJNYXRjaCkge1xyXG4gICAgICAgICAgKDxhbnk+YW5zd2VyTWF0Y2gpLnByaWNlID0gLy8gdGVtcCBmaXggZm9yIHByaWNlIHVudGlsIGJhY2tlbmQgaXMgcmVhZHlcclxuICAgICAgICAgICAgKDxhbnk+YW5zd2VyTWF0Y2gpLm5vZGVMZXZlbCA9PT0gMCAmJiBhbnN3ZXJQcmljZS5hZGRSZXRhaWxQcmljZSAmJiAoPGFueT5hbnN3ZXJNYXRjaCkuc2VxTyA9PT0gMSA/XHJcbiAgICAgICAgICAgICAgYW5zd2VyUHJpY2UuYWRkUmV0YWlsUHJpY2UgLSB0aGlzLl9hcnRpY2xlUHJpY2UgOlxyXG4gICAgICAgICAgICAgIGFuc3dlclByaWNlLmFkZFJldGFpbFByaWNlO1xyXG4gICAgICAgICAgdGhpcy5leHRyYUFuc3dlckRhdGFMb2FkZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jb3B5SW5zdGFuY2UoXHJcbiAgICBvcmlnaW5hbEluc3RhbmNlSWQ6IHN0cmluZyxcclxuICAgIHNob3VsZFNhdmVDdXJyZW50SW5zdGFuY2VJZDogYm9vbGVhbixcclxuICAgIHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdFxyXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBjb3B5SW5zdGFuY2VSZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPVxyXG4gICAgICBhd2FpdCB0aGlzLl9jb25uZWN0b3IuY29weUluc3RhbmNlKG9yaWdpbmFsSW5zdGFuY2VJZCwgc2hvdWxkU2F2ZUN1cnJlbnRJbnN0YW5jZUlkKS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlID09PSAnRUNPTk5BQk9SVEVEJyB8fCBlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5UaW1lb3V0O1xyXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5yZXN1bHRUeXBlID0gUmVzdWx0VHlwZS5Vbmtub3duO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShjb3B5SW5zdGFuY2VSZXNwb25zZS5yZXN1bHRPYmplY3QuZGF0YSkpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuICAgIGlmICghY29weUluc3RhbmNlUmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgIGlmIChjb3B5SW5zdGFuY2VSZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0Lm1lc3NhZ2VzLm1hcCgobTogYW55KSA9PiBtLm1lc3NhZ2VUeXBlID09PSAnRScpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvbk5vdEZpeGVkO1xyXG4gICAgICAgIGNvcHlJbnN0YW5jZVJlc3BvbnNlLnZhbGlkYXRpb25SZXN1bHQubWVzc2FnZXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgIHJlc3VsdC5lcnJvck1lc3NhZ2VzLnB1c2gobmV3IEVycm9yTWVzc2FnZShtLm1lc3NhZ2UpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzdWx0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQucmVzdWx0VHlwZSA9IFJlc3VsdFR5cGUuQ29uZmlndXJhdGlvblBhcnRpYWxseUZpeGVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdJbnN0YW5jZUlkOiBzdHJpbmcgPSBjb3B5SW5zdGFuY2VSZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICB0aGlzLl9oYW5kbGVJbnN0YW5jZVJlc3BvbnNlKGNvcHlJbnN0YW5jZVJlc3BvbnNlKTtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3SW5zdGFuY2VJZCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|