breeze-client 2.1.2 → 2.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.
Files changed (44) hide show
  1. package/LICENSE +1 -1
  2. package/adapter-ajax-angularjs/package.json +2 -2
  3. package/adapter-ajax-fetch/package.json +2 -2
  4. package/adapter-ajax-httpclient/package.json +2 -6
  5. package/adapter-ajax-jquery/package.json +2 -2
  6. package/adapter-ajax-post/package.json +2 -2
  7. package/adapter-data-service-odata/package.json +2 -2
  8. package/adapter-data-service-webapi/package.json +2 -2
  9. package/adapter-model-library-backing-store/package.json +2 -2
  10. package/adapter-model-library-ko/package.json +2 -2
  11. package/adapter-uri-builder-json/package.json +2 -2
  12. package/adapter-uri-builder-odata/package.json +2 -2
  13. package/breeze-client.d.ts +1 -1
  14. package/breeze-client.metadata.json +1 -1
  15. package/bundles/breeze-client.umd.js +9 -5
  16. package/bundles/breeze-client.umd.js.map +1 -1
  17. package/bundles/breeze-client.umd.min.js +1 -1
  18. package/bundles/breeze-client.umd.min.js.map +1 -1
  19. package/esm2015/breeze-client.js +2 -2
  20. package/esm2015/src/array.js +1 -1
  21. package/esm2015/src/breeze.js +2 -2
  22. package/esm2015/src/core.js +4 -1
  23. package/esm2015/src/csdl-metadata-parser.js +3 -3
  24. package/esm2015/src/default-property-interceptor.js +3 -2
  25. package/esm2015/src/enum.js +2 -2
  26. package/esm2015/src/local-query-comparison-options.js +1 -1
  27. package/esm5/breeze-client.js +2 -2
  28. package/esm5/src/array.js +1 -1
  29. package/esm5/src/breeze.js +2 -2
  30. package/esm5/src/core.js +4 -1
  31. package/esm5/src/csdl-metadata-parser.js +3 -3
  32. package/esm5/src/default-property-interceptor.js +3 -2
  33. package/esm5/src/enum.js +2 -2
  34. package/esm5/src/local-query-comparison-options.js +1 -1
  35. package/fesm2015/breeze-client.js +9 -5
  36. package/fesm2015/breeze-client.js.map +1 -1
  37. package/fesm5/breeze-client.js +9 -5
  38. package/fesm5/breeze-client.js.map +1 -1
  39. package/mixin-get-entity-graph/package.json +2 -2
  40. package/mixin-save-queuing/package.json +2 -2
  41. package/package.json +1 -1
  42. package/esm2015/public_api.js +0 -2
  43. package/esm5/public_api.js +0 -2
  44. package/public_api.d.ts +0 -1
@@ -70,7 +70,7 @@ export var breeze = {
70
70
  ValidationError: ValidationError,
71
71
  ValidationOptions: ValidationOptions,
72
72
  Validator: Validator,
73
- version: "2.1.2"
73
+ version: "2.1.3"
74
74
  };
75
75
  /** @hidden @internal */
76
76
  var win;
@@ -82,4 +82,4 @@ catch (e) {
82
82
  if (win) {
83
83
  win.breeze = breeze;
84
84
  }
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWtCLFlBQVksRUFBa0Isa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUNySyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUE0QyxjQUFjLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0ssT0FBTyxFQUFFLFlBQVksRUFBRyxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBRSxNQUFNLEVBQWUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLElBQUksRUFBMkIsTUFBTSxRQUFRLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSWxGLE9BQU8sRUFBRSxZQUFZLEVBQStCLENBQUM7QUFFckQsT0FBTyxFQUNMLDBCQUEwQixFQUkxQixjQUFjLEVBQ2QsZUFBZSxFQUVmLFlBQVksRUFDWixXQUFXLEVBQ1gsb0JBQW9CLEVBRXBCLGVBQWUsRUFDZixVQUFVLEVBQ1YsV0FBVyxFQUdYLGFBQWEsRUFFYixXQUFXLEVBQ1gsTUFBTSxFQUNOLElBQUksRUFDSixZQUFZLEVBQ1osV0FBVyxFQUdYLFFBQVEsRUFFUixZQUFZLEVBQ1osWUFBWSxFQUdaLFNBQVMsRUFDVCxhQUFhLEVBR2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxVQUFVLEVBRVYsWUFBWSxFQUVaLGFBQWEsRUFDYixhQUFhLEVBQ2IsTUFBTSxFQUdOLGlCQUFpQixFQUVqQixrQkFBa0IsRUFFbEIsWUFBWSxFQUVaLE9BQU8sRUFDUCwyQkFBMkIsRUFDM0IsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBRWIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUdsQixhQUFhLEVBQ2IsU0FBUyxFQUVULFFBQVEsRUFDUixZQUFZLEVBSVosV0FBVyxFQUVYLFlBQVksRUFJWixjQUFjLEVBR2QsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEdBR1YsQ0FBQztBQUVGLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsSUFBTSxNQUFNLEdBQUc7SUFDcEIsMEJBQTBCLEVBQUUsMEJBQTBCO0lBQ3RELFlBQVksRUFBRSxJQUFXO0lBQ3pCLFdBQVcsRUFBRSxJQUFXO0lBQ3hCLG9CQUFvQixFQUFFLG9CQUFvQjtJQUMxQyxjQUFjLEVBQUUsY0FBYztJQUM5QixhQUFhLEVBQUUsYUFBYTtJQUM1QixXQUFXLEVBQUUsV0FBVztJQUN4QixNQUFNLEVBQUUsTUFBTTtJQUNkLElBQUksRUFBRSxJQUFJO0lBQ1YsWUFBWSxFQUFFLFlBQVk7SUFDMUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsUUFBUSxFQUFFLFFBQVE7SUFDbEIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsWUFBWSxFQUFFLFlBQVk7SUFDMUIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsaUJBQWlCLEVBQUUsaUJBQWlCO0lBQ3BDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLLE9BQUE7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjJcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlZXplLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9icmVlemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLDBCQUEwQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBcUIsa0JBQWtCLEVBQW1ELE1BQU0sZ0JBQWdCLENBQUM7QUFDckksT0FBTyxFQUFFLFFBQVEsRUFBRyxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQXFFLE1BQU0saUJBQWlCLENBQUM7QUFDakksT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFtTixNQUFNLGtCQUFrQixDQUFDO0FBQ2xRLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQWtLLE1BQU0sc0JBQXNCLENBQUM7QUFDek4sT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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QyxZQUFZLEVBQUUsWUFBWTtJQUMxQiwyQkFBMkIsRUFBRSwyQkFBMkI7SUFDeEQsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsYUFBYSxFQUFFLGFBQWE7SUFDNUIsYUFBYSxFQUFFLGFBQWE7SUFDNUIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN0QyxhQUFhLEVBQUUsYUFBYTtJQUM1QixLQUFLLE9BQUE7SUFDTCxTQUFTLEVBQUUsU0FBUztJQUNwQixZQUFZLEVBQUUsWUFBWTtJQUMxQixXQUFXLEVBQUUsV0FBVztJQUN4QixlQUFlLEVBQUUsZUFBZTtJQUNoQyxpQkFBaUIsRUFBRSxpQkFBaUI7SUFDcEMsU0FBUyxFQUFFLFNBQVM7SUFDcEIsT0FBTyxFQUFFLE9BQU87Q0FDakIsQ0FBQztBQWdCRix3QkFBd0I7QUFDeEIsSUFBSSxHQUFRLENBQUM7QUFDYixJQUFJO0lBQ0YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDOUQ7QUFBQyxPQUFPLENBQUMsRUFBRTtDQUVYO0FBQ0QsSUFBSSxHQUFHLEVBQUU7SUFDUCxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBBYnN0cmFjdERhdGFTZXJ2aWNlQWRhcHRlcn0gZnJvbSAnLi9hYnN0cmFjdC1kYXRhLXNlcnZpY2UtYWRhcHRlcic7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtLCBhc3NlcnRDb25maWcsIFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBCcmVlemVDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcbmltcG9ydCB7IEJyZWV6ZUV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XHJcbmltcG9ydCB7IENvbXBsZXhBcnJheSB9IGZyb20gJy4vY29tcGxleC1hcnJheSc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEYXRhU2VydmljZUNvbmZpZywgSnNvblJlc3VsdHNBZGFwdGVyLCBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsIE5vZGVDb250ZXh0LCBOb2RlTWV0YSB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YVR5cGUgIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuL2VudGl0eS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBFbnRpdHlBc3BlY3QsIENvbXBsZXhBc3BlY3QsIEVudGl0eSwgQ29tcGxleE9iamVjdCwgU3RydWN0dXJhbE9iamVjdCwgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktYXNwZWN0JztcclxuaW1wb3J0IHsgRW50aXR5S2V5IH0gZnJvbSAnLi9lbnRpdHkta2V5JztcclxuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TWFuYWdlckNvbmZpZywgRW50aXR5RXJyb3IsIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsIFNhdmVDb250ZXh0LCBTYXZlQnVuZGxlLCBIdHRwUmVzcG9uc2UsIEtleU1hcHBpbmcsIFNlcnZlckVycm9yLCBTYXZlUmVzdWx0LCBRdWVyeVJlc3VsdCwgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsIEhhc0NoYW5nZXNDaGFuZ2VkRXZlbnRBcmdzIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IEVudGl0eVF1ZXJ5LCBGaWx0ZXJRdWVyeU9wLCBCb29sZWFuUXVlcnlPcCwgT3JkZXJCeUNsYXVzZSwgRXhwYW5kQ2xhdXNlLCBTZWxlY3RDbGF1c2UgfSBmcm9tICcuL2VudGl0eS1xdWVyeSc7XHJcbmltcG9ydCB7IEVudGl0eVN0YXRlIH0gZnJvbSAnLi9lbnRpdHktc3RhdGUnO1xyXG5pbXBvcnQgeyBJbnRlcmZhY2VSZWdpc3RyeSwgQWpheEFkYXB0ZXIsIEFqYXhDb25maWcsIERhdGFTZXJ2aWNlQWRhcHRlciwgTW9kZWxMaWJyYXJ5QWRhcHRlciwgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLCBVcmlCdWlsZGVyQWRhcHRlciwgSW50ZXJmYWNlUmVnaXN0cnlDb25maWcsIEFqYXhSZXF1ZXN0SW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyZmFjZS1yZWdpc3RyeSc7XHJcbmltcG9ydCB7IEtleUdlbmVyYXRvciB9IGZyb20gJy4va2V5LWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9ucyB9IGZyb20gJy4vbG9jYWwtcXVlcnktY29tcGFyaXNvbi1vcHRpb25zJztcclxuaW1wb3J0IHsgTWFwcGluZ0NvbnRleHQgfSBmcm9tICcuL21hcHBpbmctY29udGV4dCc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBTdHJ1Y3R1cmFsVHlwZSwgRGF0YVByb3BlcnR5LCBFbnRpdHlQcm9wZXJ0eSwgTmF2aWdhdGlvblByb3BlcnR5LCBBdXRvR2VuZXJhdGVkS2V5VHlwZSAgIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBOYW1pbmdDb252ZW50aW9uIH0gZnJvbSAnLi9uYW1pbmctY29udmVudGlvbic7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgVmlzaXRDb250ZXh0LCBWaXNpdG9yLCBFeHByZXNzaW9uQ29udGV4dCwgVW5hcnlQcmVkaWNhdGUsIEJpbmFyeVByZWRpY2F0ZSwgQW55QWxsUHJlZGljYXRlLCBBbmRPclByZWRpY2F0ZSwgTGl0RXhwciwgRm5FeHByLCBQcm9wRXhwciB9IGZyb20gJy4vcHJlZGljYXRlJztcclxuaW1wb3J0IHsgUXVlcnlPcHRpb25zLCAgRmV0Y2hTdHJhdGVneSwgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4vcXVlcnktb3B0aW9ucyc7XHJcbmltcG9ydCB7IFNhdmVPcHRpb25zIH0gZnJvbSAnLi9zYXZlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdGlvbi1vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IGNvbmZpZywgQmFzZUFkYXB0ZXIgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IGNvcmUsIENhbGxiYWNrLCBFcnJvckNhbGxiYWNrIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgbWFrZVJlbGF0aW9uQXJyYXksIG1ha2VQcmltaXRpdmVBcnJheSwgbWFrZUNvbXBsZXhBcnJheSB9IGZyb20gJy4vYXJyYXknO1xyXG5cclxuaW1wb3J0IHsgUmVsYXRpb25BcnJheSB9IGZyb20gJy4vcmVsYXRpb24tYXJyYXknO1xyXG5pbXBvcnQgeyBBcnJheUNoYW5nZWRBcmdzIH0gZnJvbSAnLi9vYnNlcnZhYmxlLWFycmF5JztcclxuZXhwb3J0IHsgQnJlZXplQ29uZmlnLCBDb21wbGV4QXJyYXksIFJlbGF0aW9uQXJyYXkgfTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXIsXHJcbiAgQWpheEFkYXB0ZXIsXHJcbiAgQWpheENvbmZpZyxcclxuICBBamF4UmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIEFuZE9yUHJlZGljYXRlLFxyXG4gIEFueUFsbFByZWRpY2F0ZSxcclxuICBBcnJheUNoYW5nZWRBcmdzLFxyXG4gIGFzc2VydENvbmZpZyxcclxuICBhc3NlcnRQYXJhbSxcclxuICBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCYXNlQWRhcHRlcixcclxuICBCaW5hcnlQcmVkaWNhdGUsXHJcbiAgQnJlZXplRW51bSxcclxuICBCcmVlemVFdmVudCwgXHJcbiAgQ2FsbGJhY2ssXHJcbiAgQ2hhbmdlUmVxdWVzdEludGVyY2VwdG9yLFxyXG4gIENvbXBsZXhBc3BlY3QsXHJcbiAgQ29tcGxleE9iamVjdCxcclxuICBDb21wbGV4VHlwZSxcclxuICBjb25maWcsXHJcbiAgY29yZSxcclxuICBEYXRhUHJvcGVydHksXHJcbiAgRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIERhdGFTZXJ2aWNlQ29uZmlnLFxyXG4gIERhdGFUeXBlLFxyXG4gIEVudGl0eSxcclxuICBFbnRpdHlBY3Rpb24sXHJcbiAgRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUNoYW5nZWRFdmVudEFyZ3MsXHJcbiAgRW50aXR5RXJyb3IsXHJcbiAgRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5TWFuYWdlckNvbmZpZyxcclxuICBFbnRpdHlQcm9wZXJ0eSxcclxuICBFbnRpdHlRdWVyeSxcclxuICBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlLFxyXG4gIEVycm9yQ2FsbGJhY2ssXHJcbiAgRXhwYW5kQ2xhdXNlLFxyXG4gIEV4cHJlc3Npb25Db250ZXh0LFxyXG4gIEZldGNoU3RyYXRlZ3ksXHJcbiAgRmlsdGVyUXVlcnlPcCxcclxuICBGbkV4cHIsXHJcbiAgSGFzQ2hhbmdlc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgSHR0cFJlc3BvbnNlLFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEludGVyZmFjZVJlZ2lzdHJ5Q29uZmlnLFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcixcclxuICBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcsXHJcbiAgS2V5R2VuZXJhdG9yLFxyXG4gIEtleU1hcHBpbmcsXHJcbiAgTGl0RXhwcixcclxuICBMb2NhbFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXHJcbiAgbWFrZUNvbXBsZXhBcnJheSxcclxuICBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXksXHJcbiAgTWFwcGluZ0NvbnRleHQsXHJcbiAgTWVyZ2VTdHJhdGVneSxcclxuICBNZXRhZGF0YVN0b3JlLFxyXG4gIE1vZGVsTGlicmFyeUFkYXB0ZXIsXHJcbiAgTmFtaW5nQ29udmVudGlvbixcclxuICBOYXZpZ2F0aW9uUHJvcGVydHksXHJcbiAgTm9kZUNvbnRleHQsXHJcbiAgTm9kZU1ldGEsXHJcbiAgT3JkZXJCeUNsYXVzZSxcclxuICBQcmVkaWNhdGUsXHJcbiAgUHJvcGVydHlDaGFuZ2VkRXZlbnRBcmdzLFxyXG4gIFByb3BFeHByLFxyXG4gIFF1ZXJ5T3B0aW9ucyxcclxuICBRdWVyeVJlc3VsdCxcclxuICBTYXZlQnVuZGxlLFxyXG4gIFNhdmVDb250ZXh0LFxyXG4gIFNhdmVPcHRpb25zLFxyXG4gIFNhdmVSZXN1bHQsXHJcbiAgU2VsZWN0Q2xhdXNlLFxyXG4gIFNlcnZlckVycm9yLFxyXG4gIFN0cnVjdHVyYWxPYmplY3QsXHJcbiAgU3RydWN0dXJhbFR5cGUsXHJcbiAgVW5hcnlQcmVkaWNhdGUsXHJcbiAgVXJpQnVpbGRlckFkYXB0ZXIsXHJcbiAgVmFsaWRhdGlvbkVycm9yc0NoYW5nZWRFdmVudEFyZ3MsXHJcbiAgVmFsaWRhdGlvbkVycm9yLFxyXG4gIFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcixcclxuICBWaXNpdENvbnRleHQsXHJcbiAgVmlzaXRvcixcclxufTtcclxuXHJcbi8vIGNyZWF0ZSBhIGJyZWV6ZSB2YXJpYWJsZSBoZXJlXHJcbmV4cG9ydCBjb25zdCBicmVlemUgPSB7XHJcbiAgQWJzdHJhY3REYXRhU2VydmljZUFkYXB0ZXI6IEFic3RyYWN0RGF0YVNlcnZpY2VBZGFwdGVyLFxyXG4gIGFzc2VydENvbmZpZzogbnVsbCBhcyBhbnksXHJcbiAgYXNzZXJ0UGFyYW06IG51bGwgYXMgYW55LFxyXG4gIEF1dG9HZW5lcmF0ZWRLZXlUeXBlOiBBdXRvR2VuZXJhdGVkS2V5VHlwZSxcclxuICBCb29sZWFuUXVlcnlPcDogQm9vbGVhblF1ZXJ5T3AsXHJcbiAgQ29tcGxleEFzcGVjdDogQ29tcGxleEFzcGVjdCxcclxuICBDb21wbGV4VHlwZTogQ29tcGxleFR5cGUsXHJcbiAgY29uZmlnOiBjb25maWcsXHJcbiAgY29yZTogY29yZSxcclxuICBEYXRhUHJvcGVydHk6IERhdGFQcm9wZXJ0eSxcclxuICBEYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgRGF0YVR5cGU6IERhdGFUeXBlLFxyXG4gIEVudGl0eUFjdGlvbjogRW50aXR5QWN0aW9uLFxyXG4gIEVudGl0eUFzcGVjdDogRW50aXR5QXNwZWN0LFxyXG4gIEVudGl0eUtleTogRW50aXR5S2V5LFxyXG4gIEVudGl0eU1hbmFnZXI6IEVudGl0eU1hbmFnZXIsXHJcbiAgRW50aXR5UXVlcnk6IEVudGl0eVF1ZXJ5LFxyXG4gIEVudGl0eVN0YXRlOiBFbnRpdHlTdGF0ZSxcclxuICBFbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxyXG4gIEV2ZW50OiBCcmVlemVFdmVudCxcclxuICBGZXRjaFN0cmF0ZWd5OiBGZXRjaFN0cmF0ZWd5LFxyXG4gIEZpbHRlclF1ZXJ5T3A6IEZpbHRlclF1ZXJ5T3AsXHJcbiAgSW50ZXJmYWNlUmVnaXN0cnk6IEludGVyZmFjZVJlZ2lzdHJ5LFxyXG4gIEpzb25SZXN1bHRzQWRhcHRlcjogSnNvblJlc3VsdHNBZGFwdGVyLFxyXG4gIEtleUdlbmVyYXRvcjogS2V5R2VuZXJhdG9yLFxyXG4gIExvY2FsUXVlcnlDb21wYXJpc29uT3B0aW9uczogTG9jYWxRdWVyeUNvbXBhcmlzb25PcHRpb25zLFxyXG4gIG1ha2VDb21wbGV4QXJyYXk6IG1ha2VDb21wbGV4QXJyYXksXHJcbiAgbWFrZVByaW1pdGl2ZUFycmF5OiBtYWtlUHJpbWl0aXZlQXJyYXksXHJcbiAgbWFrZVJlbGF0aW9uQXJyYXk6IG1ha2VSZWxhdGlvbkFycmF5LFxyXG4gIE1lcmdlU3RyYXRlZ3k6IE1lcmdlU3RyYXRlZ3ksXHJcbiAgTWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSxcclxuICBOYW1pbmdDb252ZW50aW9uOiBOYW1pbmdDb252ZW50aW9uLFxyXG4gIE5hdmlnYXRpb25Qcm9wZXJ0eTogTmF2aWdhdGlvblByb3BlcnR5LFxyXG4gIE9yZGVyQnlDbGF1c2U6IE9yZGVyQnlDbGF1c2UsIC8vIGZvciB0ZXN0aW5nIG9ubHlcclxuICBQYXJhbSxcclxuICBQcmVkaWNhdGU6IFByZWRpY2F0ZSxcclxuICBRdWVyeU9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcclxuICBTYXZlT3B0aW9uczogU2F2ZU9wdGlvbnMsXHJcbiAgVmFsaWRhdGlvbkVycm9yOiBWYWxpZGF0aW9uRXJyb3IsXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnM6IFZhbGlkYXRpb25PcHRpb25zLFxyXG4gIFZhbGlkYXRvcjogVmFsaWRhdG9yLFxyXG4gIHZlcnNpb246IFwiMi4xLjNcIlxyXG59O1xyXG5cclxuLy8gYnJlZXplLmFzc2VydENvbmZpZyA9IGFzc2VydENvbmZpZyBhcyBhbnk7XHJcbi8vIGJyZWV6ZS5hc3NlcnRQYXJhbSA9IGFzc2VydFBhcmFtIGFzIGFueTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgcHJvbWlzZXMge1xyXG4gIC8qKiBuby1vcCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGJyZWV6ZS1icmlkZ2UyLWFuZ3VsYXIgKi9cclxuICBleHBvcnQgaW50ZXJmYWNlIElQcm9taXNlU2VydmljZSB7fVxyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgd2luZG93OiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxubGV0IHdpbjogYW55O1xyXG50cnkge1xyXG4gIHdpbiA9IHdpbmRvdyA/IHdpbmRvdyA6IChnbG9iYWwgPyBnbG9iYWwud2luZG93IDogdW5kZWZpbmVkKTtcclxufSBjYXRjaCAoZSkge1xyXG5cclxufVxyXG5pZiAod2luKSB7XHJcbiAgd2luLmJyZWV6ZSA9IGJyZWV6ZTtcclxufVxyXG4iXX0=
package/esm5/src/core.js CHANGED
@@ -452,6 +452,9 @@ function requireLibCore(libName) {
452
452
  }
453
453
  /** Execute fn while obj has tempValue for property */
454
454
  function using(obj, property, tempValue, fn) {
455
+ if (!obj) {
456
+ return fn();
457
+ }
455
458
  var originalValue = obj[property];
456
459
  if (tempValue === originalValue) {
457
460
  return fn();
@@ -711,4 +714,4 @@ function isPrimitive(obj: any) {
711
714
  }
712
715
 
713
716
  */
714
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWVwQyxJQUFJLGNBQWMsR0FBMEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckcsSUFBSSxVQUFVLEdBQXVELE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RFO0lBQzFCLElBQUk7UUFDQSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDMUU7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQztBQU5ELElBQUksY0FBYyxHQUFZLElBTTFCLENBQUM7QUFFTCxzQkFBc0I7QUFDdEIsU0FBUyxhQUFhLENBQUMsR0FBVyxFQUFFLElBQW9DO0lBQ3BFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ2pCLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0tBQ0o7QUFDTCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBVyxFQUFFLElBQXFDO0lBQ2pFLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNqQixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxD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VSxFQUFFLFVBQVU7SUFDdEIsS0FBSyxFQUFFLEtBQUs7SUFDWixhQUFhLEVBQUUsYUFBYTtJQUU1QixPQUFPLEVBQUUsT0FBTztJQUNoQixPQUFPLEVBQUUsT0FBTztJQUNoQixpQkFBaUIsRUFBRSxpQkFBaUI7SUFFcEMsVUFBVSxFQUFFLFVBQVU7SUFFdEIsTUFBTSxFQUFFLE1BQU07SUFDZCxZQUFZLEVBQUUsWUFBWTtJQUMxQixNQUFNLEVBQUUsTUFBTTtJQUNkLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFNBQVMsRUFBRSxTQUFTO0lBRXBCLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLElBQUksRUFBRSxJQUFJO0lBRVYsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGNBQWMsRUFBRSxjQUFjO0lBQzlCLFlBQVksRUFBRSxZQUFZO0lBQzFCLFNBQVMsRUFBRSxjQUFjO0lBRXpCLE1BQU0sRUFBRSxNQUFNO0lBQ2QsVUFBVSxFQUFFLFVBQVU7SUFDdEIsa0JBQWtCLEVBQUUsa0JBQWtCO0lBRXRDLE9BQU8sRUFBRSxPQUFPO0NBQ25CLENBQUM7O0FBT0YsU0FBUztBQUNUOzs7Ozs7Ozs7O0VBVUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU2VlIGlmIHRoaXMgY29tbWVudCB3aWxsIG1ha2UgaXQgaW50byAuZC50cyAqL1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtIH0gZnJvbSAnLi9lbnVtJztcclxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnk7XHJcbmRlY2xhcmUgdmFyIHdpbmRvdzogYW55O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFcnJvckNhbGxiYWNrIHtcclxuICAgIChlcnJvcjogRXJyb3IpOiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrIHtcclxuICAgIChkYXRhOiBhbnkpOiB2b2lkO1xyXG59XHJcblxyXG4vLyB0eXBlIFByZWRpY2F0ZSA9IChpOiBhbnkpID0+IGJvb2xlYW47XHJcbnR5cGUgUHJlZGljYXRlPFQ+ID0gKGk6IFQpID0+IGJvb2xlYW47XHJcblxyXG5sZXQgaGFzT3duUHJvcGVydHk6IChvYmo6IE9iamVjdCwga2V5OiBzdHJpbmcpID0+IGJvb2xlYW4gPSB1bmN1cnJ5KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xyXG5sZXQgYXJyYXlTbGljZTogKGFyOiBhbnlbXSwgc3RhcnQ/OiBudW1iZXIsIGVuZD86IG51bWJlcikgPT4gYW55W10gPSB1bmN1cnJ5KEFycmF5LnByb3RvdHlwZS5zbGljZSk7XHJcbmxldCBpc0VTNVN1cHBvcnRlZDogYm9vbGVhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuICEhKE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4Jywge30pKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn0gKCk7XHJcblxyXG4vLyBpdGVyYXRlIG92ZXIgb2JqZWN0XHJcbmZ1bmN0aW9uIG9iamVjdEZvckVhY2gob2JqOiBPYmplY3QsIGt2Rm46IChrZXk6IHN0cmluZywgdmFsOiBhbnkpID0+IGFueSkge1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkpIHtcclxuICAgICAgICAgICAga3ZGbihrZXksIG9ialtrZXldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9iamVjdE1hcChvYmo6IE9iamVjdCwga3ZGbj86IChrZXk6IHN0cmluZywgdmFsOiBhbnkpID0+IGFueSk6IGFueVtdIHtcclxuICAgIGxldCByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGt2Rm4gPyBrdkZuKGtleSwgb2JqW2tleV0pIDogb2JqW2tleV07XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxufVxyXG5cclxuZnVuY3Rpb24gb2JqZWN0Rmlyc3Qob2JqOiBPYmplY3QsIGt2UHJlZGljYXRlOiAoa2V5OiBzdHJpbmcsIHZhbDogYW55KSA9PiBib29sZWFuKTogeyBrZXk6IHN0cmluZywgdmFsdWU6IGFueSB9IHwgbnVsbCB7XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwga2V5KSkge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmpba2V5XTtcclxuICAgICAgICAgICAgaWYgKGt2UHJlZGljYXRlKGtleSwgdmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBrZXk6IGtleSwgdmFsdWU6IHZhbHVlIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0TWFwPFQsIFU+KGFycjogVFtdLCBtYXBGbjogKGFyZzogVCkgPT4gVVtdKSB7XHJcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJyLm1hcChtYXBGbikpIGFzIFVbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTZXR0YWJsZShvYmo6IE9iamVjdCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGxldCBwZCA9IGdldFByb3BEZXNjcmlwdG9yKG9iaiwgcHJvcGVydHlOYW1lKTtcclxuICAgIGlmIChwZCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiAhIShwZC53cml0YWJsZSB8fCBwZC5zZXQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQcm9wRGVzY3JpcHRvcihvYmo6IE9iamVjdCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFpc0VTNVN1cHBvcnRlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBuZXh0T2JqID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XHJcbiAgICAgICAgaWYgKG5leHRPYmogPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gZ2V0UHJvcERlc2NyaXB0b3IobmV4dE9iaiwgcHJvcGVydHlOYW1lKTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gRnVuY3Rpb25hbCBleHRlbnNpb25zXHJcblxyXG4vKiogY2FuIGJlIHVzZWQgbGlrZTogcGVyc29ucy5maWx0ZXIocHJvcEVxKFwiZmlyc3ROYW1lXCIsIFwiSm9oblwiKSkgKi9cclxuZnVuY3Rpb24gcHJvcEVxKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogKG9iajogT2JqZWN0KSA9PiBib29sZWFuIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gb2JqW3Byb3BlcnR5TmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIGNhbiBiZSB1c2VkIGxpa2U6IHBlcnNvbnMuZmlsdGVyKHByb3BFcShcImZpcnN0TmFtZVwiLCBcIkZpcnN0TmFtZVwiLCBcIkpvaG5cIikpICovXHJcbmZ1bmN0aW9uIHByb3BzRXEocHJvcGVydHkxTmFtZTogc3RyaW5nLCBwcm9wZXJ0eTJOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiAob2JqOiBPYmplY3QpID0+IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBvYmpbcHJvcGVydHkxTmFtZV0gPT09IHZhbHVlIHx8IG9ialtwcm9wZXJ0eTJOYW1lXSA9PT0gdmFsdWU7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiogY2FuIGJlIHVzZWQgbGlrZSBwZXJzb25zLm1hcChwbHVjayhcImZpcnN0TmFtZVwiKSkgKi9cclxuZnVuY3Rpb24gcGx1Y2socHJvcGVydHlOYW1lOiBhbnkpOiAob2JqOiBPYmplY3QpID0+IGFueSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9iajogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wZXJ0eU5hbWVdO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gZW5kIGZ1bmN0aW9uYWwgZXh0ZW5zaW9uc1xyXG5cclxuLyoqIFJldHVybiBhbiBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSBzb3VyY2UgKi9cclxuZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlWYWx1ZXMoc291cmNlOiBPYmplY3QpOiBhbnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkoc291cmNlLCBuYW1lKSkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChzb3VyY2VbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKiBDb3B5IHByb3BlcnRpZXMgZnJvbSBzb3VyY2UgdG8gdGFyZ2V0LiBSZXR1cm5zIHRhcmdldC4gKi9cclxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldDogT2JqZWN0LCBzb3VyY2U6IE9iamVjdCwgcHJvcE5hbWVzPzogc3RyaW5nW10pOiBPYmplY3Qge1xyXG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiB0YXJnZXQ7XHJcbiAgICBpZiAocHJvcE5hbWVzKSB7XHJcbiAgICAgICAgcHJvcE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICAgIHRhcmdldFtwcm9wTmFtZV0gPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGxldCBwcm9wTmFtZSBpbiBzb3VyY2UpIHtcclxuICAgICAgICAgICAgaWYgKGhhc093blByb3BlcnR5KHNvdXJjZSwgcHJvcE5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qKiBDb3B5IHByb3BlcnRpZXMgZnJvbSBkZWZhdWx0cyBpZmYgdW5kZWZpbmVkIG9uIHRhcmdldC4gIFJldHVybnMgdGFyZ2V0LiAqL1xyXG5mdW5jdGlvbiB1cGRhdGVXaXRoRGVmYXVsdHModGFyZ2V0OiBPYmplY3QsIGRlZmF1bHRzOiBPYmplY3QpOiBhbnkge1xyXG4gICAgZm9yIChsZXQgbmFtZSBpbiBkZWZhdWx0cykge1xyXG4gICAgICAgIGlmICh0YXJnZXRbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBkZWZhdWx0c1tuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiogU2V0IGN0b3IuZGVmYXVsdEluc3RhbmNlIHRvIGFuIGluc3RhbmNlIG9mIGN0b3Igd2l0aCBwcm9wZXJ0aWVzIGZyb20gdGFyZ2V0LlxyXG4gICAgV2Ugd2FudCB0byBpbnN1cmUgdGhhdCB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGN0b3IuZGVmYXVsdEluc3RhbmNlIGlzIGFsd2F5cyBpbW11dGFibGVcclxuICAgIFVzZSAndGFyZ2V0JyBhcyB0aGUgcHJpbWFyeSB0ZW1wbGF0ZSBmb3IgdGhlIGN0b3IuZGVmYXVsdEluc3RhbmNlO1xyXG4gICAgVXNlIGN1cnJlbnQgJ2N0b3IuZGVmYXVsdEluc3RhbmNlJyBhcyB0aGUgdGVtcGxhdGUgZm9yIGFueSBtaXNzaW5nIHByb3BlcnRpZXNcclxuICAgIGNyZWF0ZXMgYSBuZXcgaW5zdGFuY2UgZm9yIGN0b3IuZGVmYXVsdEluc3RhbmNlXHJcbiAgICByZXR1cm5zIHRhcmdldCB1bmNoYW5nZWQgKi9cclxuZnVuY3Rpb24gc2V0QXNEZWZhdWx0KHRhcmdldDogT2JqZWN0LCBjdG9yOiB7IG5ldyAoLi4uYXJnczogYW55W10pOiBhbnksIGRlZmF1bHRJbnN0YW5jZT86IGFueSB9KTogYW55IHtcclxuICAgIGN0b3IuZGVmYXVsdEluc3RhbmNlID0gdXBkYXRlV2l0aERlZmF1bHRzKG5ldyBjdG9yKHRhcmdldCksIGN0b3IuZGVmYXVsdEluc3RhbmNlKTtcclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gICAgJ3NvdXJjZScgaXMgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSB0cmFuc2Zvcm1lZCBpbnRvIGFub3RoZXJcclxuICAgICd0ZW1wbGF0ZScgaXMgYSBtYXAgd2hlcmUgdGhlXHJcbiAgICAgICBrZXlzOiBhcmUgdGhlIGtleXMgdG8gcmV0dXJuXHJcbiAgICAgICAgIGlmIGEga2V5IGNvbnRhaW5zICcsJ3MgdGhlbiB0aGUga2V5IGlzIHRyZWF0ZWQgYXMgYSBkZWxpbWl0ZWQgc3RyaW5nIHdpdGggZmlyc3Qgb2YgdGhlXHJcbiAgICAgICAgIGtleXMgYmVpbmcgdGhlIGtleSB0byByZXR1cm4gYW5kIHRoZSBvdGhlcnMgYWxsIHZhbGlkIGFsaWFzZXMgZm9yIHRoaXMga2V5XHJcbiAgICAgICAndmFsdWVzJyBhcmUgZWl0aGVyXHJcbiAgICAgICAgICAgMSkgdGhlICdkZWZhdWx0JyB2YWx1ZSBvZiB0aGUga2V5XHJcbiAgICAgICAgICAgMikgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGluIHRoZSBzb3VyY2UgdmFsdWUgYW5kIHNob3VsZCByZXR1cm4gdGhlIHZhbHVlIHRvIHNldFxyXG4gICAgICAgICBUaGUgdmFsdWUgZnJvbSB0aGUgc291cmNlIGlzIHRoZW4gc2V0IG9uIHRoZSB0YXJnZXQsXHJcbiAgICAgICAgIGFmdGVyIGZpcnN0IHBhc3NpbmcgdGhydSB0aGUgZm4sIGlmIHByb3ZpZGVkLCBVTkxFU1M6XHJcbiAgICAgICAgICAgMSkgaXQgaXMgdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgICAgICAyKSBpdCBpcyB1bmRlZmluZWQgKCBudWxscyBXSUxMIGJlIHNldClcclxuICAgICd0YXJnZXQnIGlzIG9wdGlvbmFsXHJcbiAgICAgICAtIGlmIGl0IGV4aXN0cyB0aGVuIHByb3BlcnRpZXMgb2YgdGhlIHRhcmdldCB3aWxsIGJlIHNldCAoIG92ZXJ3cml0dGVuIGlmIHRoZSBleGlzdClcclxuICAgICAgIC0gaWYgaXQgZG9lcyBub3QgZXhpc3QgdGhlbiBhIG5ldyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIGFzIGZpbGxlZC5cclxuICAgICd0YXJnZXQgaXMgcmV0dXJuZWQuXHJcbiovXHJcbmZ1bmN0aW9uIHRvSnNvbihzb3VyY2U6IE9iamVjdCwgdGVtcGxhdGU6IE9iamVjdCwgdGFyZ2V0OiBPYmplY3QgPSB7fSk6IE9iamVjdCB7XHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIHRlbXBsYXRlKSB7XHJcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBrZXkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSB0ZW1wbGF0ZVtrZXldO1xyXG4gICAgICAgIC8vIHVzaW5nIHNvbWUgYXMgYSBmb3JFYWNoIHdpdGggYSAnYnJlYWsnXHJcbiAgICAgICAgYWxpYXNlcy5zb21lKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICBpZiAoIShwcm9wTmFtZSBpbiBzb3VyY2UpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgZnVuY3Rpb25hbCBwcm9wZXJ0eSBkZWZpbmVkIHdpdGggdGhpcyBhbGlhcyAoIG5vdCB3aGF0IHdlIHdhbnQgdG8gcmVwbGFjZSkuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgLy8gJz09JyBpcyBkZWxpYmVyYXRlIGhlcmUgLSBpZGVhIGlzIHRoYXQgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIHdpbGwgbmV2ZXIgZ2V0IHNlcmlhbGl6ZWRcclxuICAgICAgICAgICAgLy8gaWYgZGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gbnVsbC5cclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBkZWZhdWx0VmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiAoZGVmYXVsdFZhbHVlKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mICh2YWx1ZSkgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJyZWV6ZUVudW0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXRbYWxpYXNlc1swXV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiogUmVwbGFjZXIgZnVuY3Rpb24gZm9yIHRvSlNPTlNhZmUsIHdoZW4gc2VyaWFsaXppbmcgZW50aXRpZXMuICBFeGNsdWRlcyBlbnRpdHlBc3BlY3QgYW5kIG90aGVyIGludGVybmFsIHByb3BlcnRpZXMuICovXHJcbmZ1bmN0aW9uIHRvSlNPTlNhZmVSZXBsYWNlcihwcm9wOiBzdHJpbmcsIHZhbDogYW55KSB7XHJcbiAgICBpZiAocHJvcCA9PT0gXCJlbnRpdHlBc3BlY3RcIiB8fCBwcm9wID09PSBcImNvbXBsZXhBc3BlY3RcIiB8fCBwcm9wID09PSBcImVudGl0eVR5cGVcIiB8fCBwcm9wID09PSBcImNvbXBsZXhUeXBlXCJcclxuICAgICAgICB8fCBwcm9wID09PSBcImdldFByb3BlcnR5XCIgfHwgcHJvcCA9PT0gXCJzZXRQcm9wZXJ0eVwiXHJcbiAgICAgICAgfHwgcHJvcCA9PT0gXCJjb25zdHJ1Y3RvclwiIHx8IHByb3AuY2hhckF0KDApID09PSAnXycgfHwgcHJvcC5jaGFyQXQoMCkgPT09ICckJykgcmV0dXJuO1xyXG4gICAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLyoqIFNhZmVseSBwZXJmb3JtIHRvSlNPTiBsb2dpYyBvbiBvYmplY3RzIHdpdGggY3ljbGVzLiAqL1xyXG5mdW5jdGlvbiB0b0pTT05TYWZlKG9iajogYW55LCByZXBsYWNlcj86IChwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IGFueSk6IGFueSB7XHJcbiAgICBpZiAob2JqICE9PSBPYmplY3Qob2JqKSkgcmV0dXJuIG9iajsgLy8gcHJpbWl0aXZlIHZhbHVlXHJcbiAgICBpZiAob2JqLl8kdmlzaXRlZCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChvYmoudG9KU09OKSB7XHJcbiAgICAgICAgbGV0IG5ld09iaiA9IG9iai50b0pTT04oKTtcclxuICAgICAgICBpZiAobmV3T2JqICE9PSBPYmplY3QobmV3T2JqKSkgcmV0dXJuIG5ld09iajsgLy8gcHJpbWl0aXZlIHZhbHVlXHJcbiAgICAgICAgaWYgKG5ld09iaiAhPT0gb2JqKSByZXR1cm4gdG9KU09OU2FmZShuZXdPYmosIHJlcGxhY2VyKTtcclxuICAgICAgICAvLyB0b0pTT04gcmV0dXJuZWQgdGhlIG9iamVjdCB1bmNoYW5nZWQuXHJcbiAgICAgICAgb2JqID0gbmV3T2JqO1xyXG4gICAgfVxyXG4gICAgb2JqLl8kdmlzaXRlZCA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnk7XHJcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICByZXN1bHQgPSBvYmoubWFwKGZ1bmN0aW9uIChvOiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRvSlNPTlNhZmUobywgcmVwbGFjZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgKG9iaikgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdWx0ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgcHJvcCBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKHByb3AgPT09IFwiXyR2aXNpdGVkXCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBsZXQgdmFsID0gb2JqW3Byb3BdO1xyXG4gICAgICAgICAgICBpZiAocmVwbGFjZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhbCA9IHJlcGxhY2VyKHByb3AsIHZhbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhbCA9IHRvSlNPTlNhZmUodmFsLCByZXBsYWNlcik7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkgY29udGludWU7XHJcbiAgICAgICAgICAgIHJlc3VsdFtwcm9wXSA9IHZhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkZWxldGUgb2JqLl8kdmlzaXRlZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKiBSZXNvbHZlcyB0aGUgdmFsdWVzIG9mIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIGJ5IGNoZWNraW5nIGVhY2ggcHJvcGVydHkgaW4gbXVsdGlwbGUgc291cmNlcyB1bnRpbCBhIHZhbHVlIGlzIGZvdW5kLiAqL1xyXG5mdW5jdGlvbiByZXNvbHZlUHJvcGVydGllcyhzb3VyY2VzOiBPYmplY3RbXSwgcHJvcGVydHlOYW1lczogc3RyaW5nW10pOiBhbnkge1xyXG4gICAgbGV0IHIgPSB7fTtcclxuICAgIGxldCBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcclxuICAgIHByb3BlcnR5TmFtZXMuZm9yRWFjaChmdW5jdGlvbiAocG4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBzcmMgPSBzb3VyY2VzW2ldO1xyXG4gICAgICAgICAgICBpZiAoc3JjKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gc3JjW3BuXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJbcG5dID0gdmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuXHJcbi8vIGFycmF5IGZ1bmN0aW9uc1xyXG5cclxuZnVuY3Rpb24gdG9BcnJheShpdGVtOiBhbnkpOiBhbnlbXSB7XHJcbiAgICBpZiAoaXRlbSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW0pKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBbaXRlbV07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBhIHZlcnNpb24gb2YgQXJyYXkubWFwIHRoYXQgZG9lc24ndCByZXF1aXJlIGFuIGFycmF5LCBpLmUuIHdvcmtzIG9uIGFycmF5cyBhbmQgc2NhbGFycy4gKi9cclxuLy8gZnVuY3Rpb24gbWFwPFQsIFU+KGl0ZW1zOiBUIHwgVFtdLCBmbjogKHY6IFQsIGl4PzogbnVtYmVyKSA9PiBVLCBpbmNsdWRlTnVsbD86IGJvb2xlYW4pOiBVIHwgVVtdIHtcclxuIGZ1bmN0aW9uIG1hcDxUPihpdGVtczogVCB8IFRbXSwgZm46ICh2OiBULCBpeD86IG51bWJlcikgPT4gYW55LCBpbmNsdWRlTnVsbD86IGJvb2xlYW4pOiBhbnkgfCBhbnlbXSB7XHJcbiAgICAvLyB3aGV0aGVyIHRvIHJldHVybiBudWxscyBpbiBhcnJheSBvZiByZXN1bHRzOyBkZWZhdWx0ID0gdHJ1ZTtcclxuICAgIGluY2x1ZGVOdWxsID0gaW5jbHVkZU51bGwgPT0gbnVsbCA/IHRydWUgOiBpbmNsdWRlTnVsbDtcclxuICAgIGlmIChpdGVtcyA9PSBudWxsKSByZXR1cm4gaXRlbXM7XHJcbiAgICAvLyBsZXQgcmVzdWx0OiBVW107XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcclxuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHY6IGFueSwgaXg6IG51bWJlcikge1xyXG4gICAgICAgICAgICBsZXQgciA9IGZuKHYsIGl4KTtcclxuICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCB8fCBpbmNsdWRlTnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0W2l4XSA9IHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZm4oaXRlbXMpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4vKiogUmV0dXJuIGZpcnN0IGVsZW1lbnQgbWF0Y2hpbmcgcHJlZGljYXRlICovXHJcbmZ1bmN0aW9uIGFycmF5Rmlyc3Q8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8YW55Pik6IFQ7XHJcbmZ1bmN0aW9uIGFycmF5Rmlyc3Q8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8VD4pIHtcclxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vKiogUmV0dXJuIGluZGV4IG9mIGZpcnN0IGVsZW1lbnQgbWF0Y2hpbmcgcHJlZGljYXRlICovXHJcbmZ1bmN0aW9uIGFycmF5SW5kZXhPZjxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6IFByZWRpY2F0ZTxhbnk+KTogbnVtYmVyO1xyXG5mdW5jdGlvbiBhcnJheUluZGV4T2Y8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8VD4pOiBudW1iZXIge1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuICAgICAgICBpZiAocHJlZGljYXRlKGFycmF5W2ldKSkgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbn1cclxuXHJcbi8qKiBBZGQgaXRlbSBpZiBub3QgYWxyZWFkeSBpbiBhcnJheSAqL1xyXG5mdW5jdGlvbiBhcnJheUFkZEl0ZW1VbmlxdWU8VD4oYXJyYXk6IFRbXSwgaXRlbTogVCkge1xyXG4gICAgbGV0IGl4ID0gYXJyYXkuaW5kZXhPZihpdGVtKTtcclxuICAgIGlmIChpeCA9PT0gLTEpIGFycmF5LnB1c2goaXRlbSk7XHJcbn1cclxuXHJcbi8qKiBSZW1vdmUgaXRlbXMgZnJvbSB0aGUgYXJyYXlcclxuICogQHBhcmFtIGFycmF5XHJcbiAqIEBwYXJhbSBwcmVkaWNhdGVPckl0ZW0gLSBpdGVtIHRvIHJlbW92ZSwgb3IgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIG1hdGNoaW5nIGl0ZW1cclxuICogQHBhcmFtIHNob3VsZFJlbW92ZU11bHRpcGxlIC0gdHJ1ZSB0byBrZWVwIHJlbW92aW5nIGFmdGVyIGZpcnN0IG1hdGNoLCBmYWxzZSBvdGhlcndpc2VcclxuICovXHJcbmZ1bmN0aW9uIGFycmF5UmVtb3ZlSXRlbTxUPihhcnJheTogVFtdLCBwcmVkaWNhdGVPckl0ZW06IFQgfCBQcmVkaWNhdGU8VD4gLCBzaG91bGRSZW1vdmVNdWx0aXBsZT86IGJvb2xlYW4pIHtcclxuICAgIGxldCBwcmVkaWNhdGUgPSAoaXNGdW5jdGlvbihwcmVkaWNhdGVPckl0ZW0pID8gcHJlZGljYXRlT3JJdGVtIDogdW5kZWZpbmVkKSBhcyBQcmVkaWNhdGU8VD47XHJcbiAgICBsZXQgbGFzdEl4ID0gYXJyYXkubGVuZ3RoIC0gMTtcclxuICAgIGxldCByZW1vdmVkID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gbGFzdEl4OyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGlmIChwcmVkaWNhdGUgPyBwcmVkaWNhdGUoYXJyYXlbaV0pIDogKGFycmF5W2ldID09PSBwcmVkaWNhdGVPckl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGFycmF5LnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgcmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkUmVtb3ZlTXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbW92ZWQ7XHJcbn1cclxuXHJcbi8qKiBDb21iaW5lIGFycmF5IGVsZW1lbnRzIHVzaW5nIHRoZSBjYWxsYmFjay4gIFJldHVybnMgYXJyYXkgd2l0aCBsZW5ndGggPT0gbWluKGExLmxlbmd0aCwgYTIubGVuZ3RoKSAqL1xyXG5mdW5jdGlvbiBhcnJheVppcChhMTogYW55W10sIGEyOiBhbnlbXSwgY2FsbGJhY2s6ICh4MTogYW55LCB4MjogYW55KSA9PiBhbnkpOiBhbnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IG4gPSBNYXRoLm1pbihhMS5sZW5ndGgsIGEyLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKGNhbGxiYWNrKGExW2ldLCBhMltpXSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLy9mdW5jdGlvbiBhcnJheURpc3RpbmN0KGFycmF5KSB7XHJcbi8vICAgIGFycmF5ID0gYXJyYXkgfHwgW107XHJcbi8vICAgIGxldCByZXN1bHQgPSBbXTtcclxuLy8gICAgZm9yIChsZXQgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcclxuLy8gICAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihhcnJheVtpXSkgPCAwKVxyXG4vLyAgICAgICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldKTtcclxuLy8gICAgfVxyXG4vLyAgICByZXR1cm4gcmVzdWx0O1xyXG4vL31cclxuXHJcbi8vIE5vdCB5ZXQgbmVlZGVkXHJcbi8vLy8gbXVjaCBmYXN0ZXIgYnV0IG9ubHkgd29ya3Mgb24gYXJyYXkgaXRlbXMgd2l0aCBhIHRvU3RyaW5nIG1ldGhvZCB0aGF0XHJcbi8vLy8gcmV0dXJucyBkaXN0aW5jdCBzdHJpbmcgZm9yIGRpc3RpbmN0IG9iamVjdHMuICBTbyB0aGlzIGlzIHNhZmUgZm9yIGFycmF5cyB3aXRoIHByaW1pdGl2ZVxyXG4vLy8vIHR5cGVzIGJ1dCBub3QgZm9yIGFycmF5cyB3aXRoIG9iamVjdCB0eXBlcywgdW5sZXNzIHRvU3RyaW5nKCkgaGFzIGJlZW4gaW1wbGVtZW50ZWQuXHJcbi8vZnVuY3Rpb24gYXJyYXlEaXN0aW5jdFVuc2FmZShhcnJheSkge1xyXG4vLyAgICBsZXQgbyA9IHt9LCBpLCBsID0gYXJyYXkubGVuZ3RoLCByID0gW107XHJcbi8vICAgIGZvciAoaSA9IDA7IGkgPCBsOyBpICs9IDEpIHtcclxuLy8gICAgICAgIGxldCB2ID0gYXJyYXlbaV07XHJcbi8vICAgICAgICBvW3ZdID0gdjtcclxuLy8gICAgfVxyXG4vLyAgICBmb3IgKGkgaW4gbykgci5wdXNoKG9baV0pO1xyXG4vLyAgICByZXR1cm4gcjtcclxuLy99XHJcblxyXG5mdW5jdGlvbiBhcnJheUVxdWFscyhhMTogYW55W10sIGEyOiBhbnlbXSwgZXF1YWxzRm4/OiAoeDE6IGFueSwgeDI6IGFueSkgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgLy9DaGVjayBpZiB0aGUgYXJyYXlzIGFyZSB1bmRlZmluZWQvbnVsbFxyXG4gICAgaWYgKCFhMSB8fCAhYTIpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBpZiAoYTEubGVuZ3RoICE9PSBhMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvL2dvIHRocnUgYWxsIHRoZSB2YXJzXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy9pZiB0aGUgbGV0IGlzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIG1ha2UgYSByZWN1cnNpdmUgY2hlY2tcclxuICAgICAgICAvL290aGVyd2lzZSB3ZSdsbCBqdXN0IGNvbXBhcmUgdGhlIHZhbHVlc1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGExW2ldKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFycmF5RXF1YWxzKGExW2ldLCBhMltpXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXF1YWxzRm4pIHtcclxuICAgICAgICAgICAgICAgIGlmICghZXF1YWxzRm4oYTFbaV0sIGEyW2ldKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGExW2ldICE9PSBhMltpXSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbi8vIGVuZCBvZiBhcnJheSBmdW5jdGlvbnNcclxuXHJcbi8qKiBSZXR1cm5zIGFuIGFycmF5IGZvciBhIHNvdXJjZSBhbmQgYSBwcm9wLCBhbmQgY3JlYXRlcyB0aGUgcHJvcCBpZiBuZWVkZWQuICovXHJcbmZ1bmN0aW9uIGdldEFycmF5KHNvdXJjZTogT2JqZWN0LCBwcm9wTmFtZTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgbGV0IGFyciA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICBpZiAoIWFycikge1xyXG4gICAgICAgIGFyciA9IFtdO1xyXG4gICAgICAgIHNvdXJjZVtwcm9wTmFtZV0gPSBhcnI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG59XHJcblxyXG4vKiogQ2FsbHMgcmVxdWlyZUxpYkNvcmUgb24gc2VtaWNvbG9uLXNlcGFyYXRlZCBsaWJOYW1lcyAqL1xyXG5mdW5jdGlvbiByZXF1aXJlTGliKGxpYk5hbWVzOiBzdHJpbmcsIGVyck1lc3NhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGxldCBhcnJOYW1lcyA9IGxpYk5hbWVzLnNwbGl0KFwiO1wiKTtcclxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gYXJyTmFtZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcbiAgICAgICAgbGV0IGxpYiA9IHJlcXVpcmVMaWJDb3JlKGFyck5hbWVzW2ldKTtcclxuICAgICAgICBpZiAobGliKSByZXR1cm4gbGliO1xyXG4gICAgfVxyXG4gICAgaWYgKGVyck1lc3NhZ2UpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBcIiArIGxpYk5hbWVzICsgXCIuICBcIiArIGVyck1lc3NhZ2UpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuXHJcbi8qKiBSZXR1cm5zIHRoZSAnbGliTmFtZScgbW9kdWxlIGlmIGxvYWRlZCBvciBlbHNlIHJldHVybnMgdW5kZWZpbmVkICovXHJcbmZ1bmN0aW9uIHJlcXVpcmVMaWJDb3JlKGxpYk5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IHdpbiA9IHdpbmRvdyB8fCAoZ2xvYmFsID8gZ2xvYmFsLndpbmRvdyA6IHVuZGVmaW5lZCk7XHJcbiAgICBpZiAoIXdpbikgcmV0dXJuOyAvLyBNdXN0IHJ1biBpbiBhIGJyb3dzZXIuIFRvZG86IGFkZCBjb21tb25qcyBzdXBwb3J0XHJcblxyXG4gICAgLy8gZ2V0IGxpYnJhcnkgZnJvbSBicm93c2VyIGdsb2JhbHMgaWYgd2UgY2FuXHJcbiAgICBsZXQgbGliID0gd2luW2xpYk5hbWVdO1xyXG4gICAgaWYgKGxpYikgcmV0dXJuIGxpYjtcclxuXHJcbiAgICAvLyBpZiByZXF1aXJlIGV4aXN0cywgbWF5YmUgcmVxdWlyZSBjYW4gZ2V0IGl0LlxyXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgc3luY2hyb25vdXMgc28gaXQgY2FuJ3QgbG9hZCBtb2R1bGVzIHdpdGggQU1ELlxyXG4gICAgLy8gSXQgY2FuIG9ubHkgb2J0YWluIG1vZHVsZXMgZnJvbSByZXF1aXJlIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkLlxyXG4gICAgLy8gRGV2ZWxvcGVyIHNob3VsZCBib290c3RyYXAgc3VjaCB0aGF0IHRoZSBicmVlemUgbW9kdWxlXHJcbiAgICAvLyBsb2FkcyBhZnRlciBhbGwgb3RoZXIgbGlicmFyaWVzIHRoYXQgYnJlZXplIHNob3VsZCBmaW5kIHdpdGggdGhpcyBtZXRob2RcclxuICAgIC8vIFNlZSBkb2N1bWVudGF0aW9uXHJcbiAgICBsZXQgciA9IHdpbi5yZXF1aXJlO1xyXG4gICAgaWYgKHIpIHsgLy8gaWYgcmVxdWlyZSBleGlzdHNcclxuICAgICAgICBpZiAoci5kZWZpbmVkKSB7IC8vIHJlcXVpcmUuZGVmaW5lZCBpcyBub3Qgc3RhbmRhcmQgYW5kIG1heSBub3QgZXhpc3RcclxuICAgICAgICAgICAgLy8gcmVxdWlyZS5kZWZpbmVkIHJldHVybnMgdHJ1ZSBpZiBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkXHJcbiAgICAgICAgICAgIHJldHVybiByLmRlZmluZWQobGliTmFtZSkgPyByKGxpYk5hbWUpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHJlcXVpcmUuZGVmaW5lZCBkb2VzIG5vdCBleGlzdCBzbyB3ZSBoYXZlIHRvIGNhbGwgcmVxdWlyZSgnbGliTmFtZScpIGRpcmVjdGx5LlxyXG4gICAgICAgICAgICAvLyBUaGUgcmVxdWlyZSgnbGliTmFtZScpIG92ZXJsb2FkIGlzIHN5bmNocm9ub3VzIGFuZCBkb2VzIG5vdCBsb2FkIG1vZHVsZXMuXHJcbiAgICAgICAgICAgIC8vIEl0IHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIG1vZHVsZSBpc24ndCBhbHJlYWR5IGxvYWRlZC5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByKGxpYk5hbWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyByZXF1aXJlKCdsaWJOYW1lJykgdGhyZXcgYmVjYXVzZSBtb2R1bGUgbm90IGxvYWRlZFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vKiogRXhlY3V0ZSBmbiB3aGlsZSBvYmogaGFzIHRlbXBWYWx1ZSBmb3IgcHJvcGVydHkgKi9cclxuZnVuY3Rpb24gdXNpbmcob2JqOiBPYmplY3QsIHByb3BlcnR5OiBzdHJpbmcsIHRlbXBWYWx1ZTogYW55LCBmbjogKCkgPT4gYW55KSB7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IG9ialtwcm9wZXJ0eV07XHJcbiAgICBpZiAodGVtcFZhbHVlID09PSBvcmlnaW5hbFZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICB9XHJcbiAgICBvYmpbcHJvcGVydHldID0gdGVtcFZhbHVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgaWYgKG9yaWdpbmFsVmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BlcnR5XTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbcHJvcGVydHldID0gb3JpZ2luYWxWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBDYWxsIHN0YXRlID0gc3RhcnRGbigpLCBjYWxsIGZuKCksIGNhbGwgZW5kRm4oc3RhdGUpICovXHJcbmZ1bmN0aW9uIHdyYXBFeGVjdXRpb24oc3RhcnRGbjogKCkgPT4gYW55LCBlbmRGbjogKHN0YXRlOiBhbnkpID0+IGFueSwgZm46ICgpID0+IGFueSkge1xyXG4gICAgbGV0IHN0YXRlOiBhbnk7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHN0YXRlID0gc3RhcnRGbigpO1xyXG4gICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHN0YXRlKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgc3RhdGUuZXJyb3IgPSBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBlO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBlbmRGbihzdGF0ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBSZW1lbWJlciAmIHJldHVybiB0aGUgdmFsdWUgb2YgZm4oKSB3aGVuIGl0IHdhcyBjYWxsZWQgd2l0aCBpdHMgY3VycmVudCBhcmdzICovXHJcbmZ1bmN0aW9uIG1lbW9pemUoZm46IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBhcmdzID0gYXJyYXlTbGljZSg8YW55PmFyZ3VtZW50cyksXHJcbiAgICAgICAgICAgIGhhc2ggPSBcIlwiLFxyXG4gICAgICAgICAgICBpID0gYXJncy5sZW5ndGgsXHJcbiAgICAgICAgICAgIGN1cnJlbnRBcmc6IGFueSA9IG51bGw7XHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICBjdXJyZW50QXJnID0gYXJnc1tpXTtcclxuICAgICAgICAgICAgaGFzaCArPSAoY3VycmVudEFyZyA9PT0gT2JqZWN0KGN1cnJlbnRBcmcpKSA/IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRBcmcpIDogY3VycmVudEFyZztcclxuICAgICAgICAgICAgZm4ubWVtb2l6ZSB8fCAoZm4ubWVtb2l6ZSA9IHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChoYXNoIGluIGZuLm1lbW9pemUpID9cclxuICAgICAgICAgICAgZm4ubWVtb2l6ZVtoYXNoXSA6XHJcbiAgICAgICAgICAgIGZuLm1lbW9pemVbaGFzaF0gPSBmbi5hcHBseSh0aGlzLCBhcmdzKTtcclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFV1aWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgbGV0IHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBkdXJhdGlvblRvU2Vjb25kcyhkdXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICAvLyBiYXNpYyBhbGdvcml0aG0gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbmV6YXNhL2lzbzg2MDEtanMtcGVyaW9kXHJcbiAgICBpZiAodHlwZW9mIGR1cmF0aW9uICE9PSBcInN0cmluZ1wiKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIElTTzg2MDEgZHVyYXRpb24gJ1wiICsgZHVyYXRpb24gKyBcIidcIik7XHJcblxyXG4gICAgLy8gcmVnZXggc3BsaXRzIGFzIGZvbGxvd3MgLSBncnAwLCBncnAxLCB5LCBtLCBkLCBncnAyLCBoLCBtLCBzXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgIDEgICAgIDIgIDMgIDQgIDUgICAgIDYgIDcgIDhcclxuICAgIGxldCBzdHJ1Y3QgPSAvXlAoKFxcZCtZKT8oXFxkK00pPyhcXGQrRCk/KT8oVChcXGQrSCk/KFxcZCtNKT8oXFxkK1MpPyk/JC8uZXhlYyhkdXJhdGlvbik7XHJcbiAgICBpZiAoIXN0cnVjdCkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBJU084NjAxIGR1cmF0aW9uICdcIiArIGR1cmF0aW9uICsgXCInXCIpO1xyXG5cclxuICAgIGxldCB5bWRobXNJbmRleGVzID0gWzIsIDMsIDQsIDYsIDcsIDhdOyAvLyAtPiBncnAxLHksbSxkLGdycDIsaCxtLHNcclxuICAgIGxldCBmYWN0b3JzID0gWzMxMTA0MDAwLCAvLyB5ZWFyICgzNjAqMjQqNjAqNjApXHJcbiAgICAgICAgMjU5MjAwMCwgICAgICAgICAgICAgLy8gbW9udGggKDMwKjI0KjYwKjYwKVxyXG4gICAgICAgIDg2NDAwLCAgICAgICAgICAgICAgIC8vIGRheSAoMjQqNjAqNjApXHJcbiAgICAgICAgMzYwMCwgICAgICAgICAgICAgICAgLy8gaG91ciAoNjAqNjApXHJcbiAgICAgICAgNjAsICAgICAgICAgICAgICAgICAgLy8gbWludXRlICg2MClcclxuICAgICAgICAxXTsgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgKDEpXHJcblxyXG4gICAgbGV0IHNlY29uZHMgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuICAgICAgICBsZXQgZGlnaXQgPSBzdHJ1Y3RbeW1kaG1zSW5kZXhlc1tpXV07XHJcbiAgICAgICAgLy8gcmVtb3ZlIGxldHRlcnMsIHJlcGxhY2UgYnkgMCBpZiBub3QgZGVmaW5lZFxyXG4gICAgICAgIGRpZ2l0ID0gPGFueT4oZGlnaXQgPyArZGlnaXQucmVwbGFjZSgvW0EtWmEtel0rL2csICcnKSA6IDApO1xyXG4gICAgICAgIHNlY29uZHMgKz0gPGFueT5kaWdpdCAqIGZhY3RvcnNbaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2Vjb25kcztcclxuXHJcbn1cclxuXHJcbi8vIGlzIGZ1bmN0aW9uc1xyXG5cclxuZnVuY3Rpb24gbm9vcCgpIHtcclxuICAgIC8vIGRvZXMgbm90aGluZ1xyXG59XHJcblxyXG5mdW5jdGlvbiBpZGVudGl0eSh4OiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHg7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsYXNzb2YobzogYW55KSB7XHJcbiAgICBpZiAobyA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBcIm51bGxcIjtcclxuICAgIH1cclxuICAgIGlmIChvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRGF0ZShvOiBhbnkpIHtcclxuICAgIHJldHVybiBjbGFzc29mKG8pID09PSBcImRhdGVcIiAmJiAhaXNOYU4oby5nZXRUaW1lKCkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0RhdGVTdHJpbmcoczogc3RyaW5nKSB7XHJcbiAgICAvLyBsZXQgcnggPSAvXihcXGR7NH18WytcXC1dXFxkezZ9KSg/Oi0oXFxkezJ9KSg/Oi0oXFxkezJ9KSk/KT8oPzpUKFxcZHsyfSk6KFxcZHsyfSkoPzo6KFxcZHsyfSkoPzpcXC4oXFxkezN9KSk/KT8oPzooWil8KFsrXFwtXSkoXFxkezJ9KSg/OjooXFxkezJ9KSk/KT8pPyQvO1xyXG4gICAgbGV0IHJ4ID0gL14oKFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkXFwuXFxkKyhbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8WikpfChcXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZChbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8WikpfChcXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFRbMC0yXVxcZDpbMC01XVxcZChbKy1dWzAtMl1cXGQ6WzAtNV1cXGR8WikpKSQvO1xyXG4gICAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIikgJiYgcngudGVzdChzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNGdW5jdGlvbihvOiBhbnkpIHtcclxuICAgIHJldHVybiBjbGFzc29mKG8pID09PSBcImZ1bmN0aW9uXCI7XHJcbn1cclxuXHJcbi8vIGZ1bmN0aW9uIGlzU3RyaW5nKG86IGFueSkge1xyXG4vLyAgICAgcmV0dXJuICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIik7XHJcbi8vIH1cclxuXHJcbi8vIGZ1bmN0aW9uIGlzT2JqZWN0KG86IGFueSkge1xyXG4vLyAgICAgcmV0dXJuICh0eXBlb2YgbyA9PT0gXCJvYmplY3RcIik7XHJcbi8vIH1cclxuXHJcbmZ1bmN0aW9uIGlzR3VpZCh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgJiYgL1thLWZBLUZcXGRdezh9LSg/OlthLWZBLUZcXGRdezR9LSl7M31bYS1mQS1GXFxkXXsxMn0vLnRlc3QodmFsdWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0R1cmF0aW9uKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAmJiAvXigtfCk/UFtUXT9bXFxkXFwuLFxcLV0rW1lNRFRIU10vLnRlc3QodmFsdWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VtcHR5KG9iajogYW55KSB7XHJcbiAgICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwga2V5KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzTnVtZXJpYyhuOiBhbnkpIHtcclxuICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XHJcbn1cclxuXHJcblxyXG5cclxuLy8gZW5kIG9mIGlzIEZ1bmN0aW9uc1xyXG5cclxuLy8gc3RyaW5nIGZ1bmN0aW9uc1xyXG5cclxuZnVuY3Rpb24gc3RyaW5nU3RhcnRzV2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcclxuICAgIC8vIHJldHVybnMgdHJ1ZSBmb3IgZW1wdHkgc3RyaW5nIG9yIG51bGwgcHJlZml4XHJcbiAgICBpZiAoKCFzdHIpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAocHJlZml4ID09PSBcIlwiIHx8IHByZWZpeCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBzdHIuaW5kZXhPZihwcmVmaXgsIDApID09PSAwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzdHJpbmdFbmRzV2l0aChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpIHtcclxuICAgIC8vIHJldHVybnMgdHJ1ZSBmb3IgZW1wdHkgc3RyaW5nIG9yIG51bGwgc3VmZml4XHJcbiAgICBpZiAoKCFzdHIpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoc3VmZml4ID09PSBcIlwiIHx8IHN1ZmZpeCA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBzdHIuaW5kZXhPZihzdWZmaXgsIHN0ci5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSAhPT0gLTE7XHJcbn1cclxuXHJcbi8vIEJhc2VkIG9uIGZyYWdtZW50IGZyb20gRGVhbiBFZHdhcmRzJyBCYXNlIDIgbGlicmFyeVxyXG4vKiogZm9ybWF0KFwiYSAlMSBhbmQgYSAlMlwiLCBcImNhdFwiLCBcImRvZ1wiKSAtPiBcImEgY2F0IGFuZCBhIGRvZ1wiICovXHJcbmZ1bmN0aW9uIGZvcm1hdFN0cmluZyhzdHI6IHN0cmluZywgLi4ucGFyYW1zOiBhbnlbXSkge1xyXG4gICAgbGV0IGFyZ3MgPSBhcmd1bWVudHM7XHJcbiAgICBsZXQgcGF0dGVybiA9IFJlZ0V4cChcIiUoWzEtXCIgKyAoYXJndW1lbnRzLmxlbmd0aCAtIDEpICsgXCJdKVwiLCBcImdcIik7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UocGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBhcmdzW2luZGV4XTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MjI1NDA3L2NvbnZlcnQtY2FtZWxjYXNldGV4dC10by1jYW1lbC1jYXNlLXRleHRcclxuLyoqIENoYW5nZSB0ZXh0IHRvIHRpdGxlIGNhc2Ugd2l0aCBzcGFjZXMsIGUuZy4gJ215UHJvcGVydHlOYW1lMTInIHRvICdNeSBQcm9wZXJ0eSBOYW1lIDEyJyAqL1xyXG5sZXQgY2FtZWxFZGdlcyA9IC8oW0EtWl0oPz1bQS1aXVthLXpdKXxbXkEtWl0oPz1bQS1aXSl8W2EtekEtWl0oPz1bXmEtekEtWl0pKS9nO1xyXG5mdW5jdGlvbiB0aXRsZUNhc2VTcGFjZSh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoY2FtZWxFZGdlcywgJyQxICcpO1xyXG4gICAgdGV4dCA9IHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpO1xyXG4gICAgcmV0dXJuIHRleHQ7XHJcbn1cclxuXHJcbi8vIGVuZCBvZiBzdHJpbmcgZnVuY3Rpb25zXHJcblxyXG4vLyBTZWUgTWFyayBNaWxsZXLigJlzIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhpcyBkb2VzLlxyXG4vLyBodHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1jb252ZW50aW9uczpzYWZlX21ldGFfcHJvZ3JhbW1pbmdcclxuZnVuY3Rpb24gdW5jdXJyeShmOiBhbnkpIHtcclxuICAgIGxldCBjYWxsID0gRnVuY3Rpb24uY2FsbDtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNhbGwuYXBwbHkoZiwgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIHNoaW1zXHJcblxyXG5pZiAoIU9iamVjdC5jcmVhdGUpIHtcclxuICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAocGFyZW50OiBhbnkpIHtcclxuICAgICAgICBsZXQgRiA9IDxhbnk+ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgRi5wcm90b3R5cGUgPSBwYXJlbnQ7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGKCk7XHJcbiAgICB9O1xyXG59XHJcblxyXG4vLyBzdHJpbmdzIGZvciBlcnJvciBtZXNzYWdlc1xyXG5cclxuY29uc3Qgc3RyaW5ncyA9IHtcclxuICAgIFwiVE9fVFlQRVwiOiBcIkFkZCAnRW50aXR5UXVlcnkudG9UeXBlKCknIHRvIHlvdXIgcXVlcnksIG9yIGNhbGwgJ01ldGFkYXRhU3RvcmUuc2V0RW50aXR5VHlwZUZvclJlc291cmNlTmFtZSgpJyB0byByZWdpc3RlciBhbiBFbnRpdHlUeXBlIGZvciB0aGlzIHJlc291cmNlTmFtZS5cIlxyXG59XHJcblxyXG4vLyAvLyBub3QgYWxsIG1ldGhvZHMgYWJvdmUgYXJlIGV4cG9ydGVkXHJcbmV4cG9ydCBjb25zdCBjb3JlID0ge1xyXG4gICAgaXNFUzVTdXBwb3J0ZWQ6IGlzRVM1U3VwcG9ydGVkLFxyXG4gICAgaGFzT3duUHJvcGVydHk6IGhhc093blByb3BlcnR5LFxyXG4gICAgZ2V0T3duUHJvcGVydHlWYWx1ZXM6IGdldE93blByb3BlcnR5VmFsdWVzLFxyXG4gICAgZ2V0UHJvcGVydHlEZXNjcmlwdG9yOiBnZXRQcm9wRGVzY3JpcHRvcixcclxuICAgIG9iamVjdEZvckVhY2g6IG9iamVjdEZvckVhY2gsXHJcbiAgICBvYmplY3RGaXJzdDogb2JqZWN0Rmlyc3QsXHJcbiAgICBvYmplY3RNYXA6IG9iamVjdE1hcCwgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc29tZXRoaW5nIHN0cm9uZ2x5IHR5cGVkLlxyXG4gICAgZXh0ZW5kOiBleHRlbmQsXHJcbiAgICBwcm9wRXE6IHByb3BFcSxcclxuICAgIHByb3BzRXE6IHByb3BzRXEsXHJcbiAgICBwbHVjazogcGx1Y2ssXHJcbiAgICBtYXA6IG1hcCxcclxuICAgIHJlc29sdmVQcm9wZXJ0aWVzOiByZXNvbHZlUHJvcGVydGllcyxcclxuICAgIHNldEFzRGVmYXVsdDogc2V0QXNEZWZhdWx0LFxyXG4gICAgdXBkYXRlV2l0aERlZmF1bHRzOiB1cGRhdGVXaXRoRGVmYXVsdHMsXHJcbiAgICBnZXRBcnJheTogZ2V0QXJyYXksXHJcbiAgICB0b0FycmF5OiB0b0FycmF5LFxyXG4gICAgYXJyYXlFcXVhbHM6IGFycmF5RXF1YWxzLFxyXG4gICAgYXJyYXlTbGljZTogYXJyYXlTbGljZSxcclxuICAgIGFycmF5Rmlyc3Q6IGFycmF5Rmlyc3QsXHJcbiAgICBhcnJheUluZGV4T2Y6IGFycmF5SW5kZXhPZixcclxuICAgIGFycmF5UmVtb3ZlSXRlbTogYXJyYXlSZW1vdmVJdGVtLFxyXG4gICAgYXJyYXlaaXA6IGFycmF5WmlwLFxyXG4gICAgYXJyYXlBZGRJdGVtVW5pcXVlOiBhcnJheUFkZEl0ZW1VbmlxdWUsXHJcbiAgICBhcnJheUZsYXRNYXA6IGFycmF5RmxhdE1hcCxcclxuXHJcbiAgICByZXF1aXJlTGliOiByZXF1aXJlTGliLFxyXG4gICAgdXNpbmc6IHVzaW5nLFxyXG4gICAgd3JhcEV4ZWN1dGlvbjogd3JhcEV4ZWN1dGlvbixcclxuXHJcbiAgICBtZW1vaXplOiBtZW1vaXplLFxyXG4gICAgZ2V0VXVpZDogZ2V0VXVpZCxcclxuICAgIGR1cmF0aW9uVG9TZWNvbmRzOiBkdXJhdGlvblRvU2Vjb25kcyxcclxuXHJcbiAgICBpc1NldHRhYmxlOiBpc1NldHRhYmxlLFxyXG5cclxuICAgIGlzRGF0ZTogaXNEYXRlLFxyXG4gICAgaXNEYXRlU3RyaW5nOiBpc0RhdGVTdHJpbmcsXHJcbiAgICBpc0d1aWQ6IGlzR3VpZCxcclxuICAgIGlzRHVyYXRpb246IGlzRHVyYXRpb24sXHJcbiAgICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxyXG4gICAgaXNFbXB0eTogaXNFbXB0eSxcclxuICAgIGlzTnVtZXJpYzogaXNOdW1lcmljLFxyXG5cclxuICAgIGlkZW50aXR5OiBpZGVudGl0eSxcclxuICAgIG5vb3A6IG5vb3AsXHJcblxyXG4gICAgc3RyaW5nU3RhcnRzV2l0aDogc3RyaW5nU3RhcnRzV2l0aCxcclxuICAgIHN0cmluZ0VuZHNXaXRoOiBzdHJpbmdFbmRzV2l0aCxcclxuICAgIGZvcm1hdFN0cmluZzogZm9ybWF0U3RyaW5nLFxyXG4gICAgdGl0bGVDYXNlOiB0aXRsZUNhc2VTcGFjZSxcclxuXHJcbiAgICB0b0pzb246IHRvSnNvbixcclxuICAgIHRvSlNPTlNhZmU6IHRvSlNPTlNhZmUsXHJcbiAgICB0b0pTT05TYWZlUmVwbGFjZXI6IHRvSlNPTlNhZmVSZXBsYWNlcixcclxuXHJcbiAgICBzdHJpbmdzOiBzdHJpbmdzXHJcbn07XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yQ2FsbGJhY2sge1xyXG4gICAgKGVycm9yOiBhbnkpOiB2b2lkO1xyXG59XHJcblxyXG5cclxuLy8gVW51c2VkXHJcbi8qXHJcbi8vIHJldHVybnMgdHJ1ZSBmb3IgYm9vbGVhbnMsIG51bWJlcnMsIHN0cmluZ3MgYW5kIGRhdGVzXHJcbi8vIGZhbHNlIGZvciBudWxsLCBhbmQgbm9uLWRhdGUgb2JqZWN0cywgZnVuY3Rpb25zLCBhbmQgYXJyYXlzXHJcbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKG9iajogYW55KSB7XHJcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuICAgIC8vIHRydWUgZm9yIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zIGFuZCBudWxsLCBmYWxzZSBmb3Igb2JqZWN0c1xyXG4gICAgaWYgKG9iaiAhPSBPYmplY3Qob2JqKSkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gaXNEYXRlKG9iaik7XHJcbn1cclxuXHJcbiovIl19
717
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWVwQyxJQUFJLGNBQWMsR0FBMEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDckcsSUFBSSxVQUFVLEdBQXVELE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RFO0lBQzFCLElBQUk7UUFDQSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDMUU7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQztBQU5ELElBQUksY0FBYyxHQUFZLElBTTFCLENBQUM7QUFFTCxzQkFBc0I7QUFDdEIsU0FBUyxhQUFhLENBQUMsR0FBVyxFQUFFLElBQW9DO0lBQ3BFLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ2pCLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCO0tBQ0o7QUFDTCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsR0FBVyxFQUFFLElBQXFDO0lBQ2pFLElBQUksT0FBTyxHQUFVLEVBQUUsQ0FBQztJQUN4QixLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNqQixJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxNQUFNLEdBQUcsSUFBSSxD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SUFDbEIsa0JBQWtCLEVBQUUsa0JBQWtCO0lBQ3RDLFlBQVksRUFBRSxZQUFZO0lBRTFCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLEtBQUssRUFBRSxLQUFLO0lBQ1osYUFBYSxFQUFFLGFBQWE7SUFFNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsaUJBQWlCLEVBQUUsaUJBQWlCO0lBRXBDLFVBQVUsRUFBRSxVQUFVO0lBRXRCLE1BQU0sRUFBRSxNQUFNO0lBQ2QsWUFBWSxFQUFFLFlBQVk7SUFDMUIsTUFBTSxFQUFFLE1BQU07SUFDZCxVQUFVLEVBQUUsVUFBVTtJQUN0QixVQUFVLEVBQUUsVUFBVTtJQUN0QixPQUFPLEVBQUUsT0FBTztJQUNoQixTQUFTLEVBQUUsU0FBUztJQUVwQixRQUFRLEVBQUUsUUFBUTtJQUNsQixJQUFJLEVBQUUsSUFBSTtJQUVWLGdCQUFnQixFQUFFLGdCQUFnQjtJQUNsQyxjQUFjLEVBQUUsY0FBYztJQUM5QixZQUFZLEVBQUUsWUFBWTtJQUMxQixTQUFTLEVBQUUsY0FBYztJQUV6QixNQUFNLEVBQUUsTUFBTTtJQUNkLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLGtCQUFrQixFQUFFLGtCQUFrQjtJQUV0QyxPQUFPLEVBQUUsT0FBTztDQUNuQixDQUFDOztBQU9GLFNBQVM7QUFDVDs7Ozs7Ozs7OztFQVVFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFNlZSBpZiB0aGlzIGNvbW1lbnQgd2lsbCBtYWtlIGl0IGludG8gLmQudHMgKi9cclxuaW1wb3J0IHsgQnJlZXplRW51bSB9IGZyb20gJy4vZW51bSc7XHJcbmRlY2xhcmUgdmFyIGdsb2JhbDogYW55O1xyXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JDYWxsYmFjayB7XHJcbiAgICAoZXJyb3I6IEVycm9yKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYWxsYmFjayB7XHJcbiAgICAoZGF0YTogYW55KTogdm9pZDtcclxufVxyXG5cclxuLy8gdHlwZSBQcmVkaWNhdGUgPSAoaTogYW55KSA9PiBib29sZWFuO1xyXG50eXBlIFByZWRpY2F0ZTxUPiA9IChpOiBUKSA9PiBib29sZWFuO1xyXG5cclxubGV0IGhhc093blByb3BlcnR5OiAob2JqOiBPYmplY3QsIGtleTogc3RyaW5nKSA9PiBib29sZWFuID0gdW5jdXJyeShPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcclxubGV0IGFycmF5U2xpY2U6IChhcjogYW55W10sIHN0YXJ0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIpID0+IGFueVtdID0gdW5jdXJyeShBcnJheS5wcm90b3R5cGUuc2xpY2UpO1xyXG5sZXQgaXNFUzVTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiAhIShPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAneCcsIHt9KSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59ICgpO1xyXG5cclxuLy8gaXRlcmF0ZSBvdmVyIG9iamVjdFxyXG5mdW5jdGlvbiBvYmplY3RGb3JFYWNoKG9iajogT2JqZWN0LCBrdkZuOiAoa2V5OiBzdHJpbmcsIHZhbDogYW55KSA9PiBhbnkpIHtcclxuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIGt2Rm4oa2V5LCBvYmpba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBvYmplY3RNYXAob2JqOiBPYmplY3QsIGt2Rm4/OiAoa2V5OiBzdHJpbmcsIHZhbDogYW55KSA9PiBhbnkpOiBhbnlbXSB7XHJcbiAgICBsZXQgcmVzdWx0czogYW55W10gPSBbXTtcclxuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBrdkZuID8ga3ZGbihrZXksIG9ialtrZXldKSA6IG9ialtrZXldO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9iamVjdEZpcnN0KG9iajogT2JqZWN0LCBrdlByZWRpY2F0ZTogKGtleTogc3RyaW5nLCB2YWw6IGFueSkgPT4gYm9vbGVhbik6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkgfSB8IG51bGwge1xyXG4gICAgZm9yIChsZXQga2V5IGluIG9iaikge1xyXG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkpIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgIGlmIChrdlByZWRpY2F0ZShrZXksIHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2V5OiBrZXksIHZhbHVlOiB2YWx1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5RmxhdE1hcDxULCBVPihhcnI6IFRbXSwgbWFwRm46IChhcmc6IFQpID0+IFVbXSkge1xyXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyci5tYXAobWFwRm4pKSBhcyBVW107XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU2V0dGFibGUob2JqOiBPYmplY3QsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcGQgPSBnZXRQcm9wRGVzY3JpcHRvcihvYmosIHByb3BlcnR5TmFtZSk7XHJcbiAgICBpZiAocGQgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gISEocGQud3JpdGFibGUgfHwgcGQuc2V0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJvcERlc2NyaXB0b3Iob2JqOiBPYmplY3QsIHByb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvcGVydHlEZXNjcmlwdG9yIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghaXNFUzVTdXBwb3J0ZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eU5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgbmV4dE9iaiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xyXG4gICAgICAgIGlmIChuZXh0T2JqID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIGdldFByb3BEZXNjcmlwdG9yKG5leHRPYmosIHByb3BlcnR5TmFtZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIEZ1bmN0aW9uYWwgZXh0ZW5zaW9uc1xyXG5cclxuLyoqIGNhbiBiZSB1c2VkIGxpa2U6IHBlcnNvbnMuZmlsdGVyKHByb3BFcShcImZpcnN0TmFtZVwiLCBcIkpvaG5cIikpICovXHJcbmZ1bmN0aW9uIHByb3BFcShwcm9wZXJ0eU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IChvYmo6IE9iamVjdCkgPT4gYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9iajogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wZXJ0eU5hbWVdID09PSB2YWx1ZTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiBjYW4gYmUgdXNlZCBsaWtlOiBwZXJzb25zLmZpbHRlcihwcm9wRXEoXCJmaXJzdE5hbWVcIiwgXCJGaXJzdE5hbWVcIiwgXCJKb2huXCIpKSAqL1xyXG5mdW5jdGlvbiBwcm9wc0VxKHByb3BlcnR5MU5hbWU6IHN0cmluZywgcHJvcGVydHkyTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogKG9iajogT2JqZWN0KSA9PiBib29sZWFuIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gb2JqW3Byb3BlcnR5MU5hbWVdID09PSB2YWx1ZSB8fCBvYmpbcHJvcGVydHkyTmFtZV0gPT09IHZhbHVlO1xyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIGNhbiBiZSB1c2VkIGxpa2UgcGVyc29ucy5tYXAocGx1Y2soXCJmaXJzdE5hbWVcIikpICovXHJcbmZ1bmN0aW9uIHBsdWNrKHByb3BlcnR5TmFtZTogYW55KTogKG9iajogT2JqZWN0KSA9PiBhbnkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvYmo6IGFueSkge1xyXG4gICAgICAgIHJldHVybiBvYmpbcHJvcGVydHlOYW1lXTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIGVuZCBmdW5jdGlvbmFsIGV4dGVuc2lvbnNcclxuXHJcbi8qKiBSZXR1cm4gYW4gYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzIGZyb20gc291cmNlICovXHJcbmZ1bmN0aW9uIGdldE93blByb3BlcnR5VmFsdWVzKHNvdXJjZTogT2JqZWN0KTogYW55W10ge1xyXG4gICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcclxuICAgIGZvciAobGV0IG5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KHNvdXJjZSwgbmFtZSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goc291cmNlW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKiogQ29weSBwcm9wZXJ0aWVzIGZyb20gc291cmNlIHRvIHRhcmdldC4gUmV0dXJucyB0YXJnZXQuICovXHJcbmZ1bmN0aW9uIGV4dGVuZCh0YXJnZXQ6IE9iamVjdCwgc291cmNlOiBPYmplY3QsIHByb3BOYW1lcz86IHN0cmluZ1tdKTogT2JqZWN0IHtcclxuICAgIGlmICghc291cmNlKSByZXR1cm4gdGFyZ2V0O1xyXG4gICAgaWYgKHByb3BOYW1lcykge1xyXG4gICAgICAgIHByb3BOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xyXG4gICAgICAgICAgICB0YXJnZXRbcHJvcE5hbWVdID0gc291cmNlW3Byb3BOYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChsZXQgcHJvcE5hbWUgaW4gc291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShzb3VyY2UsIHByb3BOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W3Byb3BOYW1lXSA9IHNvdXJjZVtwcm9wTmFtZV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKiogQ29weSBwcm9wZXJ0aWVzIGZyb20gZGVmYXVsdHMgaWZmIHVuZGVmaW5lZCBvbiB0YXJnZXQuICBSZXR1cm5zIHRhcmdldC4gKi9cclxuZnVuY3Rpb24gdXBkYXRlV2l0aERlZmF1bHRzKHRhcmdldDogT2JqZWN0LCBkZWZhdWx0czogT2JqZWN0KTogYW55IHtcclxuICAgIGZvciAobGV0IG5hbWUgaW4gZGVmYXVsdHMpIHtcclxuICAgICAgICBpZiAodGFyZ2V0W25hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gZGVmYXVsdHNbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuLyoqIFNldCBjdG9yLmRlZmF1bHRJbnN0YW5jZSB0byBhbiBpbnN0YW5jZSBvZiBjdG9yIHdpdGggcHJvcGVydGllcyBmcm9tIHRhcmdldC5cclxuICAgIFdlIHdhbnQgdG8gaW5zdXJlIHRoYXQgdGhlIG9iamVjdCByZXR1cm5lZCBieSBjdG9yLmRlZmF1bHRJbnN0YW5jZSBpcyBhbHdheXMgaW1tdXRhYmxlXHJcbiAgICBVc2UgJ3RhcmdldCcgYXMgdGhlIHByaW1hcnkgdGVtcGxhdGUgZm9yIHRoZSBjdG9yLmRlZmF1bHRJbnN0YW5jZTtcclxuICAgIFVzZSBjdXJyZW50ICdjdG9yLmRlZmF1bHRJbnN0YW5jZScgYXMgdGhlIHRlbXBsYXRlIGZvciBhbnkgbWlzc2luZyBwcm9wZXJ0aWVzXHJcbiAgICBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGZvciBjdG9yLmRlZmF1bHRJbnN0YW5jZVxyXG4gICAgcmV0dXJucyB0YXJnZXQgdW5jaGFuZ2VkICovXHJcbmZ1bmN0aW9uIHNldEFzRGVmYXVsdCh0YXJnZXQ6IE9iamVjdCwgY3RvcjogeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogYW55LCBkZWZhdWx0SW5zdGFuY2U/OiBhbnkgfSk6IGFueSB7XHJcbiAgICBjdG9yLmRlZmF1bHRJbnN0YW5jZSA9IHVwZGF0ZVdpdGhEZWZhdWx0cyhuZXcgY3Rvcih0YXJnZXQpLCBjdG9yLmRlZmF1bHRJbnN0YW5jZSk7XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG4vKipcclxuICAgICdzb3VyY2UnIGlzIGFuIG9iamVjdCB0aGF0IHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50byBhbm90aGVyXHJcbiAgICAndGVtcGxhdGUnIGlzIGEgbWFwIHdoZXJlIHRoZVxyXG4gICAgICAga2V5czogYXJlIHRoZSBrZXlzIHRvIHJldHVyblxyXG4gICAgICAgICBpZiBhIGtleSBjb250YWlucyAnLCdzIHRoZW4gdGhlIGtleSBpcyB0cmVhdGVkIGFzIGEgZGVsaW1pdGVkIHN0cmluZyB3aXRoIGZpcnN0IG9mIHRoZVxyXG4gICAgICAgICBrZXlzIGJlaW5nIHRoZSBrZXkgdG8gcmV0dXJuIGFuZCB0aGUgb3RoZXJzIGFsbCB2YWxpZCBhbGlhc2VzIGZvciB0aGlzIGtleVxyXG4gICAgICAgJ3ZhbHVlcycgYXJlIGVpdGhlclxyXG4gICAgICAgICAgIDEpIHRoZSAnZGVmYXVsdCcgdmFsdWUgb2YgdGhlIGtleVxyXG4gICAgICAgICAgIDIpIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBpbiB0aGUgc291cmNlIHZhbHVlIGFuZCBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0byBzZXRcclxuICAgICAgICAgVGhlIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBpcyB0aGVuIHNldCBvbiB0aGUgdGFyZ2V0LFxyXG4gICAgICAgICBhZnRlciBmaXJzdCBwYXNzaW5nIHRocnUgdGhlIGZuLCBpZiBwcm92aWRlZCwgVU5MRVNTOlxyXG4gICAgICAgICAgIDEpIGl0IGlzIHRoZSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgICAgMikgaXQgaXMgdW5kZWZpbmVkICggbnVsbHMgV0lMTCBiZSBzZXQpXHJcbiAgICAndGFyZ2V0JyBpcyBvcHRpb25hbFxyXG4gICAgICAgLSBpZiBpdCBleGlzdHMgdGhlbiBwcm9wZXJ0aWVzIG9mIHRoZSB0YXJnZXQgd2lsbCBiZSBzZXQgKCBvdmVyd3JpdHRlbiBpZiB0aGUgZXhpc3QpXHJcbiAgICAgICAtIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gYSBuZXcgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBhcyBmaWxsZWQuXHJcbiAgICAndGFyZ2V0IGlzIHJldHVybmVkLlxyXG4qL1xyXG5mdW5jdGlvbiB0b0pzb24oc291cmNlOiBPYmplY3QsIHRlbXBsYXRlOiBPYmplY3QsIHRhcmdldDogT2JqZWN0ID0ge30pOiBPYmplY3Qge1xyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiB0ZW1wbGF0ZSkge1xyXG4gICAgICAgIGxldCBhbGlhc2VzID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gdGVtcGxhdGVba2V5XTtcclxuICAgICAgICAvLyB1c2luZyBzb21lIGFzIGEgZm9yRWFjaCB3aXRoIGEgJ2JyZWFrJ1xyXG4gICAgICAgIGFsaWFzZXMuc29tZShmdW5jdGlvbiAocHJvcE5hbWUpIHtcclxuICAgICAgICAgICAgaWYgKCEocHJvcE5hbWUgaW4gc291cmNlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBhIGZ1bmN0aW9uYWwgcHJvcGVydHkgZGVmaW5lZCB3aXRoIHRoaXMgYWxpYXMgKCBub3Qgd2hhdCB3ZSB3YW50IHRvIHJlcGxhY2UpLlxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vICc9PScgaXMgZGVsaWJlcmF0ZSBoZXJlIC0gaWRlYSBpcyB0aGF0IG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlcyB3aWxsIG5ldmVyIGdldCBzZXJpYWxpemVkXHJcbiAgICAgICAgICAgIC8vIGlmIGRlZmF1bHQgdmFsdWUgaXMgc2V0IHRvIG51bGwuXHJcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gZGVmYXVsdFZhbHVlKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKGRlZmF1bHRWYWx1ZSkgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAodmFsdWUpID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBCcmVlemVFbnVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgdGFyZ2V0W2FsaWFzZXNbMF1dID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuLyoqIFJlcGxhY2VyIGZ1bmN0aW9uIGZvciB0b0pTT05TYWZlLCB3aGVuIHNlcmlhbGl6aW5nIGVudGl0aWVzLiAgRXhjbHVkZXMgZW50aXR5QXNwZWN0IGFuZCBvdGhlciBpbnRlcm5hbCBwcm9wZXJ0aWVzLiAqL1xyXG5mdW5jdGlvbiB0b0pTT05TYWZlUmVwbGFjZXIocHJvcDogc3RyaW5nLCB2YWw6IGFueSkge1xyXG4gICAgaWYgKHByb3AgPT09IFwiZW50aXR5QXNwZWN0XCIgfHwgcHJvcCA9PT0gXCJjb21wbGV4QXNwZWN0XCIgfHwgcHJvcCA9PT0gXCJlbnRpdHlUeXBlXCIgfHwgcHJvcCA9PT0gXCJjb21wbGV4VHlwZVwiXHJcbiAgICAgICAgfHwgcHJvcCA9PT0gXCJnZXRQcm9wZXJ0eVwiIHx8IHByb3AgPT09IFwic2V0UHJvcGVydHlcIlxyXG4gICAgICAgIHx8IHByb3AgPT09IFwiY29uc3RydWN0b3JcIiB8fCBwcm9wLmNoYXJBdCgwKSA9PT0gJ18nIHx8IHByb3AuY2hhckF0KDApID09PSAnJCcpIHJldHVybjtcclxuICAgIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8qKiBTYWZlbHkgcGVyZm9ybSB0b0pTT04gbG9naWMgb24gb2JqZWN0cyB3aXRoIGN5Y2xlcy4gKi9cclxuZnVuY3Rpb24gdG9KU09OU2FmZShvYmo6IGFueSwgcmVwbGFjZXI/OiAocHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKG9iaiAhPT0gT2JqZWN0KG9iaikpIHJldHVybiBvYmo7IC8vIHByaW1pdGl2ZSB2YWx1ZVxyXG4gICAgaWYgKG9iai5fJHZpc2l0ZWQpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAob2JqLnRvSlNPTikge1xyXG4gICAgICAgIGxldCBuZXdPYmogPSBvYmoudG9KU09OKCk7XHJcbiAgICAgICAgaWYgKG5ld09iaiAhPT0gT2JqZWN0KG5ld09iaikpIHJldHVybiBuZXdPYmo7IC8vIHByaW1pdGl2ZSB2YWx1ZVxyXG4gICAgICAgIGlmIChuZXdPYmogIT09IG9iaikgcmV0dXJuIHRvSlNPTlNhZmUobmV3T2JqLCByZXBsYWNlcik7XHJcbiAgICAgICAgLy8gdG9KU09OIHJldHVybmVkIHRoZSBvYmplY3QgdW5jaGFuZ2VkLlxyXG4gICAgICAgIG9iaiA9IG5ld09iajtcclxuICAgIH1cclxuICAgIG9iai5fJHZpc2l0ZWQgPSB0cnVlO1xyXG4gICAgbGV0IHJlc3VsdDogYW55O1xyXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gb2JqLm1hcChmdW5jdGlvbiAobzogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0pTT05TYWZlKG8sIHJlcGxhY2VyKTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIChvYmopID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICByZXN1bHQgPSB1bmRlZmluZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBcIl8kdmlzaXRlZFwiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IHZhbCA9IG9ialtwcm9wXTtcclxuICAgICAgICAgICAgaWYgKHJlcGxhY2VyKSB7XHJcbiAgICAgICAgICAgICAgICB2YWwgPSByZXBsYWNlcihwcm9wLCB2YWwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YWwgPSB0b0pTT05TYWZlKHZhbCwgcmVwbGFjZXIpO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICByZXN1bHRbcHJvcF0gPSB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGVsZXRlIG9iai5fJHZpc2l0ZWQ7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vKiogUmVzb2x2ZXMgdGhlIHZhbHVlcyBvZiBhIGxpc3Qgb2YgcHJvcGVydGllcyBieSBjaGVja2luZyBlYWNoIHByb3BlcnR5IGluIG11bHRpcGxlIHNvdXJjZXMgdW50aWwgYSB2YWx1ZSBpcyBmb3VuZC4gKi9cclxuZnVuY3Rpb24gcmVzb2x2ZVByb3BlcnRpZXMoc291cmNlczogT2JqZWN0W10sIHByb3BlcnR5TmFtZXM6IHN0cmluZ1tdKTogYW55IHtcclxuICAgIGxldCByID0ge307XHJcbiAgICBsZXQgbGVuZ3RoID0gc291cmNlcy5sZW5ndGg7XHJcbiAgICBwcm9wZXJ0eU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHBuKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgc3JjID0gc291cmNlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHNyYykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IHNyY1twbl07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByW3BuXSA9IHZhbDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcblxyXG4vLyBhcnJheSBmdW5jdGlvbnNcclxuXHJcbmZ1bmN0aW9uIHRvQXJyYXkoaXRlbTogYW55KTogYW55W10ge1xyXG4gICAgaWYgKGl0ZW0gPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gW2l0ZW1dO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiogYSB2ZXJzaW9uIG9mIEFycmF5Lm1hcCB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBhbiBhcnJheSwgaS5lLiB3b3JrcyBvbiBhcnJheXMgYW5kIHNjYWxhcnMuICovXHJcbi8vIGZ1bmN0aW9uIG1hcDxULCBVPihpdGVtczogVCB8IFRbXSwgZm46ICh2OiBULCBpeD86IG51bWJlcikgPT4gVSwgaW5jbHVkZU51bGw/OiBib29sZWFuKTogVSB8IFVbXSB7XHJcbiBmdW5jdGlvbiBtYXA8VD4oaXRlbXM6IFQgfCBUW10sIGZuOiAodjogVCwgaXg/OiBudW1iZXIpID0+IGFueSwgaW5jbHVkZU51bGw/OiBib29sZWFuKTogYW55IHwgYW55W10ge1xyXG4gICAgLy8gd2hldGhlciB0byByZXR1cm4gbnVsbHMgaW4gYXJyYXkgb2YgcmVzdWx0czsgZGVmYXVsdCA9IHRydWU7XHJcbiAgICBpbmNsdWRlTnVsbCA9IGluY2x1ZGVOdWxsID09IG51bGwgPyB0cnVlIDogaW5jbHVkZU51bGw7XHJcbiAgICBpZiAoaXRlbXMgPT0gbnVsbCkgcmV0dXJuIGl0ZW1zO1xyXG4gICAgLy8gbGV0IHJlc3VsdDogVVtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh2OiBhbnksIGl4OiBudW1iZXIpIHtcclxuICAgICAgICAgICAgbGV0IHIgPSBmbih2LCBpeCk7XHJcbiAgICAgICAgICAgIGlmIChyICE9IG51bGwgfHwgaW5jbHVkZU51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdFtpeF0gPSByO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZuKGl0ZW1zKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuLyoqIFJldHVybiBmaXJzdCBlbGVtZW50IG1hdGNoaW5nIHByZWRpY2F0ZSAqL1xyXG5mdW5jdGlvbiBhcnJheUZpcnN0PFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogUHJlZGljYXRlPGFueT4pOiBUO1xyXG5mdW5jdGlvbiBhcnJheUZpcnN0PFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogUHJlZGljYXRlPFQ+KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IGFycmF5Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaV0pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhcnJheVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuLyoqIFJldHVybiBpbmRleCBvZiBmaXJzdCBlbGVtZW50IG1hdGNoaW5nIHByZWRpY2F0ZSAqL1xyXG5mdW5jdGlvbiBhcnJheUluZGV4T2Y8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiBQcmVkaWNhdGU8YW55Pik6IG51bWJlcjtcclxuZnVuY3Rpb24gYXJyYXlJbmRleE9mPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogUHJlZGljYXRlPFQ+KTogbnVtYmVyIHtcclxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpXSkpIHJldHVybiBpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG59XHJcblxyXG4vKiogQWRkIGl0ZW0gaWYgbm90IGFscmVhZHkgaW4gYXJyYXkgKi9cclxuZnVuY3Rpb24gYXJyYXlBZGRJdGVtVW5pcXVlPFQ+KGFycmF5OiBUW10sIGl0ZW06IFQpIHtcclxuICAgIGxldCBpeCA9IGFycmF5LmluZGV4T2YoaXRlbSk7XHJcbiAgICBpZiAoaXggPT09IC0xKSBhcnJheS5wdXNoKGl0ZW0pO1xyXG59XHJcblxyXG4vKiogUmVtb3ZlIGl0ZW1zIGZyb20gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSBhcnJheVxyXG4gKiBAcGFyYW0gcHJlZGljYXRlT3JJdGVtIC0gaXRlbSB0byByZW1vdmUsIG9yIGZ1bmN0aW9uIHRvIGRldGVybWluZSBtYXRjaGluZyBpdGVtXHJcbiAqIEBwYXJhbSBzaG91bGRSZW1vdmVNdWx0aXBsZSAtIHRydWUgdG8ga2VlcCByZW1vdmluZyBhZnRlciBmaXJzdCBtYXRjaCwgZmFsc2Ugb3RoZXJ3aXNlXHJcbiAqL1xyXG5mdW5jdGlvbiBhcnJheVJlbW92ZUl0ZW08VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlT3JJdGVtOiBUIHwgUHJlZGljYXRlPFQ+ICwgc2hvdWxkUmVtb3ZlTXVsdGlwbGU/OiBib29sZWFuKSB7XHJcbiAgICBsZXQgcHJlZGljYXRlID0gKGlzRnVuY3Rpb24ocHJlZGljYXRlT3JJdGVtKSA/IHByZWRpY2F0ZU9ySXRlbSA6IHVuZGVmaW5lZCkgYXMgUHJlZGljYXRlPFQ+O1xyXG4gICAgbGV0IGxhc3RJeCA9IGFycmF5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IGxhc3RJeDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBpZiAocHJlZGljYXRlID8gcHJlZGljYXRlKGFycmF5W2ldKSA6IChhcnJheVtpXSA9PT0gcHJlZGljYXRlT3JJdGVtKSkge1xyXG4gICAgICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZFJlbW92ZU11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZW1vdmVkO1xyXG59XHJcblxyXG4vKiogQ29tYmluZSBhcnJheSBlbGVtZW50cyB1c2luZyB0aGUgY2FsbGJhY2suICBSZXR1cm5zIGFycmF5IHdpdGggbGVuZ3RoID09IG1pbihhMS5sZW5ndGgsIGEyLmxlbmd0aCkgKi9cclxuZnVuY3Rpb24gYXJyYXlaaXAoYTE6IGFueVtdLCBhMjogYW55W10sIGNhbGxiYWNrOiAoeDE6IGFueSwgeDI6IGFueSkgPT4gYW55KTogYW55W10ge1xyXG4gICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcclxuICAgIGxldCBuID0gTWF0aC5taW4oYTEubGVuZ3RoLCBhMi5sZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICByZXN1bHQucHVzaChjYWxsYmFjayhhMVtpXSwgYTJbaV0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8vZnVuY3Rpb24gYXJyYXlEaXN0aW5jdChhcnJheSkge1xyXG4vLyAgICBhcnJheSA9IGFycmF5IHx8IFtdO1xyXG4vLyAgICBsZXQgcmVzdWx0ID0gW107XHJcbi8vICAgIGZvciAobGV0IGkgPSAwLCBqID0gYXJyYXkubGVuZ3RoOyBpIDwgajsgaSsrKSB7XHJcbi8vICAgICAgICBpZiAocmVzdWx0LmluZGV4T2YoYXJyYXlbaV0pIDwgMClcclxuLy8gICAgICAgICAgICByZXN1bHQucHVzaChhcnJheVtpXSk7XHJcbi8vICAgIH1cclxuLy8gICAgcmV0dXJuIHJlc3VsdDtcclxuLy99XHJcblxyXG4vLyBOb3QgeWV0IG5lZWRlZFxyXG4vLy8vIG11Y2ggZmFzdGVyIGJ1dCBvbmx5IHdvcmtzIG9uIGFycmF5IGl0ZW1zIHdpdGggYSB0b1N0cmluZyBtZXRob2QgdGhhdFxyXG4vLy8vIHJldHVybnMgZGlzdGluY3Qgc3RyaW5nIGZvciBkaXN0aW5jdCBvYmplY3RzLiAgU28gdGhpcyBpcyBzYWZlIGZvciBhcnJheXMgd2l0aCBwcmltaXRpdmVcclxuLy8vLyB0eXBlcyBidXQgbm90IGZvciBhcnJheXMgd2l0aCBvYmplY3QgdHlwZXMsIHVubGVzcyB0b1N0cmluZygpIGhhcyBiZWVuIGltcGxlbWVudGVkLlxyXG4vL2Z1bmN0aW9uIGFycmF5RGlzdGluY3RVbnNhZmUoYXJyYXkpIHtcclxuLy8gICAgbGV0IG8gPSB7fSwgaSwgbCA9IGFycmF5Lmxlbmd0aCwgciA9IFtdO1xyXG4vLyAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSArPSAxKSB7XHJcbi8vICAgICAgICBsZXQgdiA9IGFycmF5W2ldO1xyXG4vLyAgICAgICAgb1t2XSA9IHY7XHJcbi8vICAgIH1cclxuLy8gICAgZm9yIChpIGluIG8pIHIucHVzaChvW2ldKTtcclxuLy8gICAgcmV0dXJuIHI7XHJcbi8vfVxyXG5cclxuZnVuY3Rpb24gYXJyYXlFcXVhbHMoYTE6IGFueVtdLCBhMjogYW55W10sIGVxdWFsc0ZuPzogKHgxOiBhbnksIHgyOiBhbnkpID0+IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIC8vQ2hlY2sgaWYgdGhlIGFycmF5cyBhcmUgdW5kZWZpbmVkL251bGxcclxuICAgIGlmICghYTEgfHwgIWEyKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKGExLmxlbmd0aCAhPT0gYTIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLy9nbyB0aHJ1IGFsbCB0aGUgdmFyc1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhMS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vaWYgdGhlIGxldCBpcyBhbiBhcnJheSwgd2UgbmVlZCB0byBtYWtlIGEgcmVjdXJzaXZlIGNoZWNrXHJcbiAgICAgICAgLy9vdGhlcndpc2Ugd2UnbGwganVzdCBjb21wYXJlIHRoZSB2YWx1ZXNcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhMVtpXSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcnJheUVxdWFscyhhMVtpXSwgYTJbaV0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGVxdWFsc0ZuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVxdWFsc0ZuKGExW2ldLCBhMltpXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChhMVtpXSAhPT0gYTJbaV0pIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG4vLyBlbmQgb2YgYXJyYXkgZnVuY3Rpb25zXHJcblxyXG4vKiogUmV0dXJucyBhbiBhcnJheSBmb3IgYSBzb3VyY2UgYW5kIGEgcHJvcCwgYW5kIGNyZWF0ZXMgdGhlIHByb3AgaWYgbmVlZGVkLiAqL1xyXG5mdW5jdGlvbiBnZXRBcnJheShzb3VyY2U6IE9iamVjdCwgcHJvcE5hbWU6IHN0cmluZyk6IGFueVtdIHtcclxuICAgIGxldCBhcnIgPSBzb3VyY2VbcHJvcE5hbWVdO1xyXG4gICAgaWYgKCFhcnIpIHtcclxuICAgICAgICBhcnIgPSBbXTtcclxuICAgICAgICBzb3VyY2VbcHJvcE5hbWVdID0gYXJyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxufVxyXG5cclxuLyoqIENhbGxzIHJlcXVpcmVMaWJDb3JlIG9uIHNlbWljb2xvbi1zZXBhcmF0ZWQgbGliTmFtZXMgKi9cclxuZnVuY3Rpb24gcmVxdWlyZUxpYihsaWJOYW1lczogc3RyaW5nLCBlcnJNZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgYXJyTmFtZXMgPSBsaWJOYW1lcy5zcGxpdChcIjtcIik7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IGFyck5hbWVzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xyXG4gICAgICAgIGxldCBsaWIgPSByZXF1aXJlTGliQ29yZShhcnJOYW1lc1tpXSk7XHJcbiAgICAgICAgaWYgKGxpYikgcmV0dXJuIGxpYjtcclxuICAgIH1cclxuICAgIGlmIChlcnJNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGluaXRpYWxpemUgXCIgKyBsaWJOYW1lcyArIFwiLiAgXCIgKyBlcnJNZXNzYWdlKTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcblxyXG4vKiogUmV0dXJucyB0aGUgJ2xpYk5hbWUnIG1vZHVsZSBpZiBsb2FkZWQgb3IgZWxzZSByZXR1cm5zIHVuZGVmaW5lZCAqL1xyXG5mdW5jdGlvbiByZXF1aXJlTGliQ29yZShsaWJOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCB3aW4gPSB3aW5kb3cgfHwgKGdsb2JhbCA/IGdsb2JhbC53aW5kb3cgOiB1bmRlZmluZWQpO1xyXG4gICAgaWYgKCF3aW4pIHJldHVybjsgLy8gTXVzdCBydW4gaW4gYSBicm93c2VyLiBUb2RvOiBhZGQgY29tbW9uanMgc3VwcG9ydFxyXG5cclxuICAgIC8vIGdldCBsaWJyYXJ5IGZyb20gYnJvd3NlciBnbG9iYWxzIGlmIHdlIGNhblxyXG4gICAgbGV0IGxpYiA9IHdpbltsaWJOYW1lXTtcclxuICAgIGlmIChsaWIpIHJldHVybiBsaWI7XHJcblxyXG4gICAgLy8gaWYgcmVxdWlyZSBleGlzdHMsIG1heWJlIHJlcXVpcmUgY2FuIGdldCBpdC5cclxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHN5bmNocm9ub3VzIHNvIGl0IGNhbid0IGxvYWQgbW9kdWxlcyB3aXRoIEFNRC5cclxuICAgIC8vIEl0IGNhbiBvbmx5IG9idGFpbiBtb2R1bGVzIGZyb20gcmVxdWlyZSB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZC5cclxuICAgIC8vIERldmVsb3BlciBzaG91bGQgYm9vdHN0cmFwIHN1Y2ggdGhhdCB0aGUgYnJlZXplIG1vZHVsZVxyXG4gICAgLy8gbG9hZHMgYWZ0ZXIgYWxsIG90aGVyIGxpYnJhcmllcyB0aGF0IGJyZWV6ZSBzaG91bGQgZmluZCB3aXRoIHRoaXMgbWV0aG9kXHJcbiAgICAvLyBTZWUgZG9jdW1lbnRhdGlvblxyXG4gICAgbGV0IHIgPSB3aW4ucmVxdWlyZTtcclxuICAgIGlmIChyKSB7IC8vIGlmIHJlcXVpcmUgZXhpc3RzXHJcbiAgICAgICAgaWYgKHIuZGVmaW5lZCkgeyAvLyByZXF1aXJlLmRlZmluZWQgaXMgbm90IHN0YW5kYXJkIGFuZCBtYXkgbm90IGV4aXN0XHJcbiAgICAgICAgICAgIC8vIHJlcXVpcmUuZGVmaW5lZCByZXR1cm5zIHRydWUgaWYgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZFxyXG4gICAgICAgICAgICByZXR1cm4gci5kZWZpbmVkKGxpYk5hbWUpID8gcihsaWJOYW1lKSA6IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyByZXF1aXJlLmRlZmluZWQgZG9lcyBub3QgZXhpc3Qgc28gd2UgaGF2ZSB0byBjYWxsIHJlcXVpcmUoJ2xpYk5hbWUnKSBkaXJlY3RseS5cclxuICAgICAgICAgICAgLy8gVGhlIHJlcXVpcmUoJ2xpYk5hbWUnKSBvdmVybG9hZCBpcyBzeW5jaHJvbm91cyBhbmQgZG9lcyBub3QgbG9hZCBtb2R1bGVzLlxyXG4gICAgICAgICAgICAvLyBJdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBtb2R1bGUgaXNuJ3QgYWxyZWFkeSBsb2FkZWQuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcihsaWJOYW1lKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVxdWlyZSgnbGliTmFtZScpIHRocmV3IGJlY2F1c2UgbW9kdWxlIG5vdCBsb2FkZWRcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqIEV4ZWN1dGUgZm4gd2hpbGUgb2JqIGhhcyB0ZW1wVmFsdWUgZm9yIHByb3BlcnR5ICovXHJcbmZ1bmN0aW9uIHVzaW5nKG9iajogT2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nLCB0ZW1wVmFsdWU6IGFueSwgZm46ICgpID0+IGFueSkge1xyXG4gICAgaWYgKCFvYmopIHtcclxuICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgIH1cclxuICAgIGxldCBvcmlnaW5hbFZhbHVlID0gb2JqW3Byb3BlcnR5XTtcclxuICAgIGlmICh0ZW1wVmFsdWUgPT09IG9yaWdpbmFsVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZm4oKTtcclxuICAgIH1cclxuICAgIG9ialtwcm9wZXJ0eV0gPSB0ZW1wVmFsdWU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHJldHVybiBmbigpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBpZiAob3JpZ2luYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBvYmpbcHJvcGVydHldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9ialtwcm9wZXJ0eV0gPSBvcmlnaW5hbFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqIENhbGwgc3RhdGUgPSBzdGFydEZuKCksIGNhbGwgZm4oKSwgY2FsbCBlbmRGbihzdGF0ZSkgKi9cclxuZnVuY3Rpb24gd3JhcEV4ZWN1dGlvbihzdGFydEZuOiAoKSA9PiBhbnksIGVuZEZuOiAoc3RhdGU6IGFueSkgPT4gYW55LCBmbjogKCkgPT4gYW55KSB7XHJcbiAgICBsZXQgc3RhdGU6IGFueTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgc3RhdGUgPSBzdGFydEZuKCk7XHJcbiAgICAgICAgcmV0dXJuIGZuKCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoc3RhdGUpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBzdGF0ZS5lcnJvciA9IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRocm93IGU7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIGVuZEZuKHN0YXRlKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIFJlbWVtYmVyICYgcmV0dXJuIHRoZSB2YWx1ZSBvZiBmbigpIHdoZW4gaXQgd2FzIGNhbGxlZCB3aXRoIGl0cyBjdXJyZW50IGFyZ3MgKi9cclxuZnVuY3Rpb24gbWVtb2l6ZShmbjogYW55KTogYW55IHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGFyZ3MgPSBhcnJheVNsaWNlKDxhbnk+YXJndW1lbnRzKSxcclxuICAgICAgICAgICAgaGFzaCA9IFwiXCIsXHJcbiAgICAgICAgICAgIGkgPSBhcmdzLmxlbmd0aCxcclxuICAgICAgICAgICAgY3VycmVudEFyZzogYW55ID0gbnVsbDtcclxuICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRBcmcgPSBhcmdzW2ldO1xyXG4gICAgICAgICAgICBoYXNoICs9IChjdXJyZW50QXJnID09PSBPYmplY3QoY3VycmVudEFyZykpID8gSlNPTi5zdHJpbmdpZnkoY3VycmVudEFyZykgOiBjdXJyZW50QXJnO1xyXG4gICAgICAgICAgICBmbi5tZW1vaXplIHx8IChmbi5tZW1vaXplID0ge30pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGhhc2ggaW4gZm4ubWVtb2l6ZSkgP1xyXG4gICAgICAgICAgICBmbi5tZW1vaXplW2hhc2hdIDpcclxuICAgICAgICAgICAgZm4ubWVtb2l6ZVtoYXNoXSA9IGZuLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gICAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VXVpZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICBsZXQgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGR1cmF0aW9uVG9TZWNvbmRzKGR1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIC8vIGJhc2ljIGFsZ29yaXRobSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXphc2EvaXNvODYwMS1qcy1wZXJpb2RcclxuICAgIGlmICh0eXBlb2YgZHVyYXRpb24gIT09IFwic3RyaW5nXCIpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgSVNPODYwMSBkdXJhdGlvbiAnXCIgKyBkdXJhdGlvbiArIFwiJ1wiKTtcclxuXHJcbiAgICAvLyByZWdleCBzcGxpdHMgYXMgZm9sbG93cyAtIGdycDAsIGdycDEsIHksIG0sIGQsIGdycDIsIGgsIG0sIHNcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgMSAgICAgMiAgMyAgNCAgNSAgICAgNiAgNyAgOFxyXG4gICAgbGV0IHN0cnVjdCA9IC9eUCgoXFxkK1kpPyhcXGQrTSk/KFxcZCtEKT8pPyhUKFxcZCtIKT8oXFxkK00pPyhcXGQrUyk/KT8kLy5leGVjKGR1cmF0aW9uKTtcclxuICAgIGlmICghc3RydWN0KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIElTTzg2MDEgZHVyYXRpb24gJ1wiICsgZHVyYXRpb24gKyBcIidcIik7XHJcblxyXG4gICAgbGV0IHltZGhtc0luZGV4ZXMgPSBbMiwgMywgNCwgNiwgNywgOF07IC8vIC0+IGdycDEseSxtLGQsZ3JwMixoLG0sc1xyXG4gICAgbGV0IGZhY3RvcnMgPSBbMzExMDQwMDAsIC8vIHllYXIgKDM2MCoyNCo2MCo2MClcclxuICAgICAgICAyNTkyMDAwLCAgICAgICAgICAgICAvLyBtb250aCAoMzAqMjQqNjAqNjApXHJcbiAgICAgICAgODY0MDAsICAgICAgICAgICAgICAgLy8gZGF5ICgyNCo2MCo2MClcclxuICAgICAgICAzNjAwLCAgICAgICAgICAgICAgICAvLyBob3VyICg2MCo2MClcclxuICAgICAgICA2MCwgICAgICAgICAgICAgICAgICAvLyBtaW51dGUgKDYwKVxyXG4gICAgICAgIDFdOyAgICAgICAgICAgICAgICAgIC8vIHNlY29uZCAoMSlcclxuXHJcbiAgICBsZXQgc2Vjb25kcyA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgIGxldCBkaWdpdCA9IHN0cnVjdFt5bWRobXNJbmRleGVzW2ldXTtcclxuICAgICAgICAvLyByZW1vdmUgbGV0dGVycywgcmVwbGFjZSBieSAwIGlmIG5vdCBkZWZpbmVkXHJcbiAgICAgICAgZGlnaXQgPSA8YW55PihkaWdpdCA/ICtkaWdpdC5yZXBsYWNlKC9bQS1aYS16XSsvZywgJycpIDogMCk7XHJcbiAgICAgICAgc2Vjb25kcyArPSA8YW55PmRpZ2l0ICogZmFjdG9yc1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWNvbmRzO1xyXG5cclxufVxyXG5cclxuLy8gaXMgZnVuY3Rpb25zXHJcblxyXG5mdW5jdGlvbiBub29wKCkge1xyXG4gICAgLy8gZG9lcyBub3RoaW5nXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlkZW50aXR5KHg6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4geDtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xhc3NvZihvOiBhbnkpIHtcclxuICAgIGlmIChvID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xyXG4gICAgfVxyXG4gICAgaWYgKG8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNEYXRlKG86IGFueSkge1xyXG4gICAgcmV0dXJuIGNsYXNzb2YobykgPT09IFwiZGF0ZVwiICYmICFpc05hTihvLmdldFRpbWUoKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRGF0ZVN0cmluZyhzOiBzdHJpbmcpIHtcclxuICAgIC8vIGxldCByeCA9IC9eKFxcZHs0fXxbK1xcLV1cXGR7Nn0pKD86LShcXGR7Mn0pKD86LShcXGR7Mn0pKT8pPyg/OlQoXFxkezJ9KTooXFxkezJ9KSg/OjooXFxkezJ9KSg/OlxcLihcXGR7M30pKT8pPyg/OihaKXwoWytcXC1dKShcXGR7Mn0pKD86OihcXGR7Mn0pKT8pPyk/JC87XHJcbiAgICBsZXQgcnggPSAvXigoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGRcXC5cXGQrKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSl8KFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSl8KFxcZHs0fS1bMDFdXFxkLVswLTNdXFxkVFswLTJdXFxkOlswLTVdXFxkKFsrLV1bMC0yXVxcZDpbMC01XVxcZHxaKSkpJC87XHJcbiAgICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiKSAmJiByeC50ZXN0KHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKG86IGFueSkge1xyXG4gICAgcmV0dXJuIGNsYXNzb2YobykgPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5cclxuLy8gZnVuY3Rpb24gaXNTdHJpbmcobzogYW55KSB7XHJcbi8vICAgICByZXR1cm4gKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKTtcclxuLy8gfVxyXG5cclxuLy8gZnVuY3Rpb24gaXNPYmplY3QobzogYW55KSB7XHJcbi8vICAgICByZXR1cm4gKHR5cGVvZiBvID09PSBcIm9iamVjdFwiKTtcclxuLy8gfVxyXG5cclxuZnVuY3Rpb24gaXNHdWlkKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAmJiAvW2EtZkEtRlxcZF17OH0tKD86W2EtZkEtRlxcZF17NH0tKXszfVthLWZBLUZcXGRdezEyfS8udGVzdCh2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRHVyYXRpb24odmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpICYmIC9eKC18KT9QW1RdP1tcXGRcXC4sXFwtXStbWU1EVEhTXS8udGVzdCh2YWx1ZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzRW1wdHkob2JqOiBhbnkpIHtcclxuICAgIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGtleSBpbiBvYmopIHtcclxuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqLCBrZXkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNOdW1lcmljKG46IGFueSkge1xyXG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcclxufVxyXG5cclxuXHJcblxyXG4vLyBlbmQgb2YgaXMgRnVuY3Rpb25zXHJcblxyXG4vLyBzdHJpbmcgZnVuY3Rpb25zXHJcblxyXG5mdW5jdGlvbiBzdHJpbmdTdGFydHNXaXRoKHN0cjogc3RyaW5nLCBwcmVmaXg6IHN0cmluZykge1xyXG4gICAgLy8gcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmcgb3IgbnVsbCBwcmVmaXhcclxuICAgIGlmICgoIXN0cikpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChwcmVmaXggPT09IFwiXCIgfHwgcHJlZml4ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHByZWZpeCwgMCkgPT09IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHN0cmluZ0VuZHNXaXRoKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZykge1xyXG4gICAgLy8gcmV0dXJucyB0cnVlIGZvciBlbXB0eSBzdHJpbmcgb3IgbnVsbCBzdWZmaXhcclxuICAgIGlmICgoIXN0cikpIHJldHVybiBmYWxzZTtcclxuICAgIGlmIChzdWZmaXggPT09IFwiXCIgfHwgc3VmZml4ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIHN0ci5pbmRleE9mKHN1ZmZpeCwgc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpICE9PSAtMTtcclxufVxyXG5cclxuLy8gQmFzZWQgb24gZnJhZ21lbnQgZnJvbSBEZWFuIEVkd2FyZHMnIEJhc2UgMiBsaWJyYXJ5XHJcbi8qKiBmb3JtYXQoXCJhICUxIGFuZCBhICUyXCIsIFwiY2F0XCIsIFwiZG9nXCIpIC0+IFwiYSBjYXQgYW5kIGEgZG9nXCIgKi9cclxuZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHN0cjogc3RyaW5nLCAuLi5wYXJhbXM6IGFueVtdKSB7XHJcbiAgICBsZXQgYXJncyA9IGFyZ3VtZW50cztcclxuICAgIGxldCBwYXR0ZXJuID0gUmVnRXhwKFwiJShbMS1cIiArIChhcmd1bWVudHMubGVuZ3RoIC0gMSkgKyBcIl0pXCIsIFwiZ1wiKTtcclxuICAgIHJldHVybiBzdHIucmVwbGFjZShwYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gsIGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzcyMjU0MDcvY29udmVydC1jYW1lbGNhc2V0ZXh0LXRvLWNhbWVsLWNhc2UtdGV4dFxyXG4vKiogQ2hhbmdlIHRleHQgdG8gdGl0bGUgY2FzZSB3aXRoIHNwYWNlcywgZS5nLiAnbXlQcm9wZXJ0eU5hbWUxMicgdG8gJ015IFByb3BlcnR5IE5hbWUgMTInICovXHJcbmxldCBjYW1lbEVkZ2VzID0gLyhbQS1aXSg/PVtBLVpdW2Etel0pfFteQS1aXSg/PVtBLVpdKXxbYS16QS1aXSg/PVteYS16QS1aXSkpL2c7XHJcbmZ1bmN0aW9uIHRpdGxlQ2FzZVNwYWNlKHRleHQ6IHN0cmluZykge1xyXG4gICAgdGV4dCA9IHRleHQucmVwbGFjZShjYW1lbEVkZ2VzLCAnJDEgJyk7XHJcbiAgICB0ZXh0ID0gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSk7XHJcbiAgICByZXR1cm4gdGV4dDtcclxufVxyXG5cclxuLy8gZW5kIG9mIHN0cmluZyBmdW5jdGlvbnNcclxuXHJcbi8vIFNlZSBNYXJrIE1pbGxlcuKAmXMgZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGlzIGRvZXMuXHJcbi8vIGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWNvbnZlbnRpb25zOnNhZmVfbWV0YV9wcm9ncmFtbWluZ1xyXG5mdW5jdGlvbiB1bmN1cnJ5KGY6IGFueSkge1xyXG4gICAgbGV0IGNhbGwgPSBGdW5jdGlvbi5jYWxsO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gY2FsbC5hcHBseShmLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gc2hpbXNcclxuXHJcbmlmICghT2JqZWN0LmNyZWF0ZSkge1xyXG4gICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChwYXJlbnQ6IGFueSkge1xyXG4gICAgICAgIGxldCBGID0gPGFueT5mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBGLnByb3RvdHlwZSA9IHBhcmVudDtcclxuICAgICAgICByZXR1cm4gbmV3IEYoKTtcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIHN0cmluZ3MgZm9yIGVycm9yIG1lc3NhZ2VzXHJcblxyXG5jb25zdCBzdHJpbmdzID0ge1xyXG4gICAgXCJUT19UWVBFXCI6IFwiQWRkICdFbnRpdHlRdWVyeS50b1R5cGUoKScgdG8geW91ciBxdWVyeSwgb3IgY2FsbCAnTWV0YWRhdGFTdG9yZS5zZXRFbnRpdHlUeXBlRm9yUmVzb3VyY2VOYW1lKCknIHRvIHJlZ2lzdGVyIGFuIEVudGl0eVR5cGUgZm9yIHRoaXMgcmVzb3VyY2VOYW1lLlwiXHJcbn1cclxuXHJcbi8vIC8vIG5vdCBhbGwgbWV0aG9kcyBhYm92ZSBhcmUgZXhwb3J0ZWRcclxuZXhwb3J0IGNvbnN0IGNvcmUgPSB7XHJcbiAgICBpc0VTNVN1cHBvcnRlZDogaXNFUzVTdXBwb3J0ZWQsXHJcbiAgICBoYXNPd25Qcm9wZXJ0eTogaGFzT3duUHJvcGVydHksXHJcbiAgICBnZXRPd25Qcm9wZXJ0eVZhbHVlczogZ2V0T3duUHJvcGVydHlWYWx1ZXMsXHJcbiAgICBnZXRQcm9wZXJ0eURlc2NyaXB0b3I6IGdldFByb3BEZXNjcmlwdG9yLFxyXG4gICAgb2JqZWN0Rm9yRWFjaDogb2JqZWN0Rm9yRWFjaCxcclxuICAgIG9iamVjdEZpcnN0OiBvYmplY3RGaXJzdCxcclxuICAgIG9iamVjdE1hcDogb2JqZWN0TWFwLCAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzb21ldGhpbmcgc3Ryb25nbHkgdHlwZWQuXHJcbiAgICBleHRlbmQ6IGV4dGVuZCxcclxuICAgIHByb3BFcTogcHJvcEVxLFxyXG4gICAgcHJvcHNFcTogcHJvcHNFcSxcclxuICAgIHBsdWNrOiBwbHVjayxcclxuICAgIG1hcDogbWFwLFxyXG4gICAgcmVzb2x2ZVByb3BlcnRpZXM6IHJlc29sdmVQcm9wZXJ0aWVzLFxyXG4gICAgc2V0QXNEZWZhdWx0OiBzZXRBc0RlZmF1bHQsXHJcbiAgICB1cGRhdGVXaXRoRGVmYXVsdHM6IHVwZGF0ZVdpdGhEZWZhdWx0cyxcclxuICAgIGdldEFycmF5OiBnZXRBcnJheSxcclxuICAgIHRvQXJyYXk6IHRvQXJyYXksXHJcbiAgICBhcnJheUVxdWFsczogYXJyYXlFcXVhbHMsXHJcbiAgICBhcnJheVNsaWNlOiBhcnJheVNsaWNlLFxyXG4gICAgYXJyYXlGaXJzdDogYXJyYXlGaXJzdCxcclxuICAgIGFycmF5SW5kZXhPZjogYXJyYXlJbmRleE9mLFxyXG4gICAgYXJyYXlSZW1vdmVJdGVtOiBhcnJheVJlbW92ZUl0ZW0sXHJcbiAgICBhcnJheVppcDogYXJyYXlaaXAsXHJcbiAgICBhcnJheUFkZEl0ZW1VbmlxdWU6IGFycmF5QWRkSXRlbVVuaXF1ZSxcclxuICAgIGFycmF5RmxhdE1hcDogYXJyYXlGbGF0TWFwLFxyXG5cclxuICAgIHJlcXVpcmVMaWI6IHJlcXVpcmVMaWIsXHJcbiAgICB1c2luZzogdXNpbmcsXHJcbiAgICB3cmFwRXhlY3V0aW9uOiB3cmFwRXhlY3V0aW9uLFxyXG5cclxuICAgIG1lbW9pemU6IG1lbW9pemUsXHJcbiAgICBnZXRVdWlkOiBnZXRVdWlkLFxyXG4gICAgZHVyYXRpb25Ub1NlY29uZHM6IGR1cmF0aW9uVG9TZWNvbmRzLFxyXG5cclxuICAgIGlzU2V0dGFibGU6IGlzU2V0dGFibGUsXHJcblxyXG4gICAgaXNEYXRlOiBpc0RhdGUsXHJcbiAgICBpc0RhdGVTdHJpbmc6IGlzRGF0ZVN0cmluZyxcclxuICAgIGlzR3VpZDogaXNHdWlkLFxyXG4gICAgaXNEdXJhdGlvbjogaXNEdXJhdGlvbixcclxuICAgIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXHJcbiAgICBpc0VtcHR5OiBpc0VtcHR5LFxyXG4gICAgaXNOdW1lcmljOiBpc051bWVyaWMsXHJcblxyXG4gICAgaWRlbnRpdHk6IGlkZW50aXR5LFxyXG4gICAgbm9vcDogbm9vcCxcclxuXHJcbiAgICBzdHJpbmdTdGFydHNXaXRoOiBzdHJpbmdTdGFydHNXaXRoLFxyXG4gICAgc3RyaW5nRW5kc1dpdGg6IHN0cmluZ0VuZHNXaXRoLFxyXG4gICAgZm9ybWF0U3RyaW5nOiBmb3JtYXRTdHJpbmcsXHJcbiAgICB0aXRsZUNhc2U6IHRpdGxlQ2FzZVNwYWNlLFxyXG5cclxuICAgIHRvSnNvbjogdG9Kc29uLFxyXG4gICAgdG9KU09OU2FmZTogdG9KU09OU2FmZSxcclxuICAgIHRvSlNPTlNhZmVSZXBsYWNlcjogdG9KU09OU2FmZVJlcGxhY2VyLFxyXG5cclxuICAgIHN0cmluZ3M6IHN0cmluZ3NcclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JDYWxsYmFjayB7XHJcbiAgICAoZXJyb3I6IGFueSk6IHZvaWQ7XHJcbn1cclxuXHJcblxyXG4vLyBVbnVzZWRcclxuLypcclxuLy8gcmV0dXJucyB0cnVlIGZvciBib29sZWFucywgbnVtYmVycywgc3RyaW5ncyBhbmQgZGF0ZXNcclxuLy8gZmFsc2UgZm9yIG51bGwsIGFuZCBub24tZGF0ZSBvYmplY3RzLCBmdW5jdGlvbnMsIGFuZCBhcnJheXNcclxuZnVuY3Rpb24gaXNQcmltaXRpdmUob2JqOiBhbnkpIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gdHJ1ZSBmb3IgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMgYW5kIG51bGwsIGZhbHNlIGZvciBvYmplY3RzXHJcbiAgICBpZiAob2JqICE9IE9iamVjdChvYmopKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBpc0RhdGUob2JqKTtcclxufVxyXG5cclxuKi8iXX0=
@@ -2,7 +2,7 @@ import { core } from './core';
2
2
  import { MetadataStore, EntityType, ComplexType, DataProperty, NavigationProperty, AutoGeneratedKeyType } from './entity-metadata';
3
3
  import { DataType } from './data-type';
4
4
  import { Validator } from './validate';
5
- var RX_COLLECTION = /Collection\((?<type>.*)\)/;
5
+ var RX_COLLECTION = /Collection\((.*)\)/;
6
6
  function parse(metadataStore, schemas, altMetadata) {
7
7
  metadataStore._entityTypeResourceMap = {};
8
8
  schemas = core.toArray(schemas);
@@ -360,7 +360,7 @@ function parseTypeNameWithSchema(entityTypeName, schema) {
360
360
  }
361
361
  function getCollectionType(propertyType) {
362
362
  var match = propertyType.match(RX_COLLECTION);
363
- return match ? match["groups"].type : null;
363
+ return match ? match[1] : null;
364
364
  }
365
365
  function getNamespaceFor(shortName, schema) {
366
366
  var ns;
@@ -382,4 +382,4 @@ function getNamespaceFor(shortName, schema) {
382
382
  export var CsdlMetadataParser = {
383
383
  parse: parse
384
384
  };
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NkbC1tZXRhZGF0YS1wYXJzZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2NzZGwtbWV0YWRhdGEtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25JLE9BQU8sRUFBRSxRQUFRLEVBQUcsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWN2QyxJQUFNLGFBQWEsR0FBSSwyQkFBMkIsQ0FBQztBQUVuRCxTQUFTLEtBQUssQ0FBQyxhQUE0QixFQUFFLE9BQVksRUFBRSxXQUFnQjtJQUV6RSxhQUFhLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFXO1FBQ25DLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFO1lBQzlCLHFDQUFxQztZQUNyQyx5RkFBeUY7WUFDekYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQVk7Z0JBQ3JDLFFBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsUUFBTSxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFNBQVM7Z0JBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFNBQVM7b0JBQzNELElBQUksY0FBYyxHQUFHLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUNwRixhQUFhLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztvQkFDM0UsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hFLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELDRDQUE0QztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDbkQsb0JBQW9CLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xELG1CQUFtQixDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBRTFELENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFFSCxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksV0FBVyxHQUFHLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO0lBQ3BFLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDMUIsSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUc7WUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO29CQUN6QixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUM1QyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDZjtZQUNELE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsR0FBRyxHQUFHLENBQUMsQ0FBQztLQUM3RDtJQUNELElBQUksV0FBVyxFQUFFO1FBQ2YsYUFBYSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDakQ7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxjQUFtQixFQUFFLE1BQVcsRUFBRSxPQUFZLEVBQUUsYUFBNEI7SUFDdkcsSUFBSSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztJQUNwQyxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLElBQUksVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDO1FBQzlCLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLFNBQVMsRUFBRSxFQUFFO1FBQ2IsVUFBVSxFQUFFLGNBQWMsQ0FBQyxRQUFRLElBQUksY0FBYyxDQUFDLFFBQVEsS0FBSyxNQUFNO0tBQzFFLENBQUMsQ0FBQztJQUNILElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRTtRQUMzQixJQUFJLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRixVQUFVLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUN2QyxJQUFJLGNBQWMsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFFLElBQUksY0FBYyxFQUFFO1lBQ2xCLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN6RjthQUFNO1lBQ0wsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsYUFBYSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7YUFDeEQ7WUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztTQUM1RTtLQUNGO1NBQU07UUFDTCwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDekY7SUFDRCxnRkFBZ0Y7SUFDaEYsT0FBTyxVQUFVLENBQUM7QUFFcEIsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQUMsVUFBc0IsRUFBRSxjQUFtQixFQUFFLE1BQVcsRUFBRSxPQUFZLEVBQUUsYUFBNEI7SUFDdkksSUFBSSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRXRILElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUk7UUFDMUQscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSTtRQUNwRSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUMsQ0FBQztJQUVILGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsVUFBVSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkYsSUFBSSxhQUFhLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQztJQUNqRCxJQUFJLFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLElBQUksU0FBUyxFQUFFO1FBQ2IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQU07WUFDaEMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDOUYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGFBQWEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkM7QUFFSCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxlQUFvQixFQUFFLE1BQVcsRUFBRSxhQUE0QjtJQUMzRixJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3JDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFDaEMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsU0FBUyxFQUFFLEVBQUU7S0FDZCxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1FBQzNELHFCQUFxQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxhQUFhLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLFVBQW9DLEVBQUUsWUFBaUIsRUFBRSxNQUFXLEVBQUUsZ0JBQTJCO0lBQzlILElBQUksRUFBNEIsQ0FBQztJQUNqQyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3Qyw0R0FBNEc7SUFDNUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzFELEVBQUUsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7S0FDMUU7U0FBTTtRQUNMLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNwQyxFQUFFLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3pFLElBQUksRUFBRSxFQUFFO2dCQUNOLEVBQUUsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNqQztTQUNGO2FBQU07WUFDTCxFQUFFLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNqRTtLQUNGO0lBQ0QsSUFBSSxFQUFFLEVBQUU7UUFDTixVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25CO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxVQUFvQyxFQUFFLFlBQWlCLEVBQUUsZ0JBQTJCO0lBQ25ILElBQUksZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxJQUFJLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQztJQUM3RSxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtRQUNwQixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsR0FBRyxZQUFZLENBQUMsSUFBSSxHQUFHLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEksT0FBTyxTQUFTLENBQUM7S0FDbEI7SUFDRCxJQUFJLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxZQUFZLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztJQUNuRiw4RkFBOEY7SUFDOUYsSUFBSSxXQUFXLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9GLElBQUksV0FBVyxJQUFJLFVBQVUsWUFBWSxVQUFVLElBQUksVUFBVSxDQUFDLG9CQUFvQixLQUFLLG9CQUFvQixDQUFDLElBQUksRUFBRTtRQUNwSCxJQUFJLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3BDLFVBQVUsQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7U0FDakU7S0FDRjtJQUNELDJDQUEyQztJQUMzQyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQ3ZDLFNBQVMsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEYsK0VBQStFO0lBRS9FLElBQUksRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDO1FBQ3hCLFlBQVksRUFBRSxZQUFZLENBQUMsSUFBSTtRQUMvQixRQUFRLEVBQUUsUUFBUTtRQUNsQixVQUFVLEVBQUUsVUFBVTtRQUN0QixXQUFXLEVBQUUsV0FBVztRQUN4QixRQUFRLEVBQUUsQ0FBQyxnQkFBZ0I7UUFDM0IsU0FBUyxFQUFFLFNBQVM7UUFDcEIsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO1FBQ3ZDLDRCQUE0QjtRQUM1QixlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7S0FDOUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRTtRQUNuQyxFQUFFLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7S0FDcEM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLFVBQW9DLEVBQUUsWUFBaUIsRUFBRSxNQUFXO0lBRXBHLHdEQUF3RDtJQUN4RCxzRkFBc0Y7SUFDdEYsNERBQTREO0lBQzVELElBQUksZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxJQUFJLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQztJQUM3RSxJQUFJLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzdFLCtFQUErRTtJQUMvRSxJQUFJLEVBQUUsR0FBRyxJQUFJLFlBQVksQ0FBQztRQUN4QixZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUk7UUFDL0IsZUFBZSxFQUFFLGVBQWU7UUFDaEMsVUFBVSxFQUFFLEtBQUs7UUFDakIsUUFBUSxFQUFFLENBQUMsZ0JBQWdCO0tBQzVCLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsVUFBc0IsRUFBRSxZQUFpQixFQUFFLE1BQVcsRUFBRSxPQUFjO0lBQ2xHLElBQUksV0FBVyxHQUFHLGNBQWMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDNUY7SUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsVUFBQyxRQUFRO1FBQ3BELE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxRQUFRLEdBQUcsS0FBTSxDQUFDLFlBQVksS0FBSyxHQUFHLENBQUM7SUFDM0MsSUFBSSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsS0FBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFFckUsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDO0lBQ25ELElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixxR0FBcUc7UUFFckcsc0NBQXNDO1FBQ3RDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLEdBQUcsRUFBRTtZQUN0Rix3Q0FBd0M7WUFDeEMsT0FBTztTQUNSO2FBQU07WUFDTCw4REFBOEQ7WUFDOUQsMENBQTBDO1lBQzFDLGdGQUFnRjtTQUNqRjtLQUNGO0lBSUQsSUFBSSxHQUFHLEdBQUc7UUFDUixZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUk7UUFDL0IsY0FBYyxFQUFFLFFBQVE7UUFDeEIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJO0tBQ2xDLENBQUM7SUFFRixJQUFJLFVBQVUsRUFBRTtRQUNkLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDckMsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUVyQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtZQUMzQyxHQUFXLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDO1NBQ25EO2FBQU07WUFDTCxtQ0FBbUM7WUFDbEMsR0FBVyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQztTQUNoRDtLQUNGO0lBRUQsSUFBSSxFQUFFLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsWUFBb0I7SUFDeEMsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxZQUFpQixFQUFFLE1BQVc7SUFDaEQsSUFBSSxNQUFNLENBQUMsUUFBUTtRQUFFLE9BQU8sY0FBYyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1RCxJQUFJLE1BQU0sQ0FBQyxVQUFVO1FBQUUsT0FBTyxlQUFlLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDOztRQUNwRSxPQUFPLEtBQUssQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsWUFBaUIsRUFBRSxNQUFXO0lBQ3BELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzdFLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsUUFBUTtRQUN0QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFlBQWlCLEVBQUUsTUFBVztJQUNyRCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQVE7UUFDaEQsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksWUFBWSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQzdFLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQUMsUUFBYTtRQUNsQyxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQUMsSUFBUztZQUN4QyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsWUFBMEI7SUFDL0MsSUFBSSxhQUF3QixDQUFDO0lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFO1FBQzVCLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ3BEO0lBRUQsSUFBSSxZQUFZLENBQUMsaUJBQWlCO1FBQUUsT0FBTztJQUUzQyxJQUFJLFlBQVksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRTtRQUM3QyxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUU7WUFDMUIsSUFBSSxhQUFhLEdBQUcsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELGFBQWEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BDO0tBQ0Y7U0FBTTtRQUNILElBQUksYUFBYSxHQUFJLFlBQVksQ0FBQyxRQUFnQixDQUFDLGFBQWEsQ0FBQztRQUNqRSxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDM0IsYUFBYSxHQUFHLGFBQWEsRUFBRSxDQUFDO0tBQ25DO0lBRUQsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFOUMsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsWUFBaUI7SUFDM0Msc0JBQXNCO0lBQ3RCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFDLEVBQUU7UUFDM0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxRQUFRLEVBQUU7UUFDWixPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0tBQ2hEO1NBQU07UUFDTCxvQkFBb0I7UUFDcEIsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQUMsU0FBUztZQUN2RCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEtBQUssdUJBQXVCLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUM7S0FDdkI7QUFDSCxDQUFDO0FBRUQsZUFBZTtBQUNmLGdGQUFnRjtBQUNoRixtRUFBbUU7QUFDbkUseUJBQXlCO0FBRXpCLGtCQUFrQjtBQUNsQixnRkFBZ0Y7QUFDaEYsdUZBQXVGO0FBQ3ZGLDhCQUE4QjtBQUM5QiwrREFBK0Q7QUFDL0Qsc0JBQXNCO0FBRXRCLFNBQVMsY0FBYyxDQUFDLGVBQW9CLEVBQUUsZ0JBQXFCLEVBQUUsT0FBYztJQUNqRixJQUFJLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDNUYsSUFBSSxjQUFjLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUM3QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFDLE1BQU07UUFDaEQsT0FBTyxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksQ0FBQyxXQUFXO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFOUIsSUFBSSxTQUFTLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQztJQUM1QyxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDMUIsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkI7SUFDRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFDLEtBQUs7UUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sV0FBMkIsQ0FBQztBQUNyQyxDQUFDO0FBRUQsa0RBQWtEO0FBQ2xELFNBQVMsdUJBQXVCLENBQUMsY0FBc0IsRUFBRSxNQUFXO0lBQ2xFLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDekQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFO1FBQ3hDLElBQUksRUFBRSxHQUFHLGVBQWUsQ0FBQyxNQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksRUFBRSxFQUFFO1lBQ04sTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNoRTtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsWUFBb0I7SUFDN0MsSUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxTQUFpQixFQUFFLE1BQVc7SUFDckQsSUFBSSxFQUFVLENBQUM7SUFDZixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7SUFDekMsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDM0QsRUFBRSxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO0tBQ25CO0lBQ0QsdURBQXVEO0lBQ3ZELHlGQUF5RjtJQUN6RixJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7UUFDdkQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDO0tBQ3pCO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsd0JBQXdCO0FBQ3hCLE1BQU0sQ0FBQyxJQUFNLGtCQUFrQixHQUFHO0lBQ2hDLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVN0b3JlLCBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgRGF0YVByb3BlcnR5LCBOYXZpZ2F0aW9uUHJvcGVydHksIEF1dG9HZW5lcmF0ZWRLZXlUeXBlIH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSAgfSBmcm9tICcuL2RhdGEtdHlwZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gJy4vdmFsaWRhdGUnO1xyXG5cclxuaW50ZXJmYWNlIElBc3NvY2lhdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGVuZDogSUVuZFtdO1xyXG4gIHJlZmVyZW50aWFsQ29uc3RyYWludDogYW55O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSUVuZCB7XHJcbiAgbXVsdGlwbGljaXR5OiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIHJvbGU6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgUlhfQ09MTEVDVElPTiA9ICAvQ29sbGVjdGlvblxcKCg/PHR5cGU+LiopXFwpLztcclxuXHJcbmZ1bmN0aW9uIHBhcnNlKG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUsIHNjaGVtYXM6IGFueSwgYWx0TWV0YWRhdGE6IGFueSkge1xyXG5cclxuICBtZXRhZGF0YVN0b3JlLl9lbnRpdHlUeXBlUmVzb3VyY2VNYXAgPSB7fTtcclxuICBzY2hlbWFzID0gY29yZS50b0FycmF5KHNjaGVtYXMpO1xyXG4gIHNjaGVtYXMuZm9yRWFjaChmdW5jdGlvbiAoc2NoZW1hOiBhbnkpIHtcclxuICAgIGlmIChzY2hlbWEuY1NwYWNlT1NwYWNlTWFwcGluZykge1xyXG4gICAgICAvLyBXZWIgYXBpIG9ubHkgLSBub3QgYXZhaWwgaW4gT0RhdGEuXHJcbiAgICAgIC8vIFRPRE8gdGhyb3cgaW5mb3JtYXRpdmUgZXJyb3IgaWYgYWxyZWFkeSBwYXJzZWQgYW5kIGNvbnZlcnRlZCB0byBtYXAgb24gYSBwcmV2aW91cyBwYXNzXHJcbiAgICAgIGxldCBtYXBwaW5ncyA9IEpTT04ucGFyc2Uoc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcpO1xyXG4gICAgICBsZXQgbmV3TWFwID0ge307XHJcbiAgICAgIG1hcHBpbmdzLmZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmc6IGFueSkge1xyXG4gICAgICAgIG5ld01hcFttYXBwaW5nWzBdXSA9IG1hcHBpbmdbMV07XHJcbiAgICAgIH0pO1xyXG4gICAgICBzY2hlbWEuY1NwYWNlT1NwYWNlTWFwcGluZyA9IG5ld01hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2NoZW1hLmVudGl0eUNvbnRhaW5lcikge1xyXG4gICAgICBjb3JlLnRvQXJyYXkoc2NoZW1hLmVudGl0eUNvbnRhaW5lcikuZm9yRWFjaChmdW5jdGlvbiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgY29yZS50b0FycmF5KGNvbnRhaW5lci5lbnRpdHlTZXQpLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eVNldCkge1xyXG4gICAgICAgICAgbGV0IGVudGl0eVR5cGVOYW1lID0gcGFyc2VUeXBlTmFtZVdpdGhTY2hlbWEoZW50aXR5U2V0LmVudGl0eVR5cGUsIHNjaGVtYSkudHlwZU5hbWU7XHJcbiAgICAgICAgICBtZXRhZGF0YVN0b3JlLnNldEVudGl0eVR5cGVGb3JSZXNvdXJjZU5hbWUoZW50aXR5U2V0Lm5hbWUsIGVudGl0eVR5cGVOYW1lKTtcclxuICAgICAgICAgIG1ldGFkYXRhU3RvcmUuX2VudGl0eVR5cGVSZXNvdXJjZU1hcFtlbnRpdHlUeXBlTmFtZV0gPSBlbnRpdHlTZXQubmFtZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJvY2VzcyBjb21wbGV4dHlwZXMgYmVmb3JlIGVudGl0eSB0eXBlcy5cclxuICAgIGlmIChzY2hlbWEuY29tcGxleFR5cGUpIHtcclxuICAgICAgY29yZS50b0FycmF5KHNjaGVtYS5jb21wbGV4VHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoY3QpIHtcclxuICAgICAgICBwYXJzZUNzZGxDb21wbGV4VHlwZShjdCwgc2NoZW1hLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2NoZW1hLmVudGl0eVR5cGUpIHtcclxuICAgICAgY29yZS50b0FycmF5KHNjaGVtYS5lbnRpdHlUeXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChldCkge1xyXG4gICAgICAgIHBhcnNlQ3NkbEVudGl0eVR5cGUoZXQsIHNjaGVtYSwgc2NoZW1hcywgbWV0YWRhdGFTdG9yZSk7XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgfSk7XHJcbiAgbGV0IGJhZE5hdlByb3BzID0gbWV0YWRhdGFTdG9yZS5nZXRJbmNvbXBsZXRlTmF2aWdhdGlvblByb3BlcnRpZXMoKTtcclxuICBpZiAoYmFkTmF2UHJvcHMubGVuZ3RoID4gMCkge1xyXG4gICAgbGV0IG1zZyA9IGJhZE5hdlByb3BzLm1hcChmdW5jdGlvbiAobnBhKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5wYSkpIHtcclxuICAgICAgICByZXR1cm4gbnBhLm1hcChmdW5jdGlvbiAobnApIHtcclxuICAgICAgICAgIHJldHVybiBucC5wYXJlbnRUeXBlLm5hbWUgKyBcIjpcIiArIG5wLm5hbWU7XHJcbiAgICAgICAgfSkuam9pbignLCAnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnBhLnBhcmVudFR5cGUubmFtZSArIFwiOlwiICsgbnBhLm5hbWU7XHJcbiAgICB9KS5qb2luKCcsICcpO1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb21wbGV0ZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXM6IFwiICsgbXNnKTtcclxuICB9XHJcbiAgaWYgKGFsdE1ldGFkYXRhKSB7XHJcbiAgICBtZXRhZGF0YVN0b3JlLmltcG9ydE1ldGFkYXRhKGFsdE1ldGFkYXRhLCB0cnVlKTtcclxuICB9XHJcbiAgcmV0dXJuIG1ldGFkYXRhU3RvcmU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbEVudGl0eVR5cGUoY3NkbEVudGl0eVR5cGU6IGFueSwgc2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gIGxldCBzaG9ydE5hbWUgPSBjc2RsRW50aXR5VHlwZS5uYW1lO1xyXG4gIGxldCBucyA9IGdldE5hbWVzcGFjZUZvcihzaG9ydE5hbWUsIHNjaGVtYSk7XHJcbiAgbGV0IGVudGl0eVR5cGUgPSBuZXcgRW50aXR5VHlwZSh7XHJcbiAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgIG5hbWVzcGFjZTogbnMsXHJcbiAgICBpc0Fic3RyYWN0OiBjc2RsRW50aXR5VHlwZS5hYnN0cmFjdCAmJiBjc2RsRW50aXR5VHlwZS5hYnN0cmFjdCA9PT0gJ3RydWUnXHJcbiAgfSk7XHJcbiAgaWYgKGNzZGxFbnRpdHlUeXBlLmJhc2VUeXBlKSB7XHJcbiAgICBsZXQgYmFzZVR5cGVOYW1lID0gcGFyc2VUeXBlTmFtZVdpdGhTY2hlbWEoY3NkbEVudGl0eVR5cGUuYmFzZVR5cGUsIHNjaGVtYSkudHlwZU5hbWU7XHJcbiAgICBlbnRpdHlUeXBlLmJhc2VUeXBlTmFtZSA9IGJhc2VUeXBlTmFtZTtcclxuICAgIGxldCBiYXNlRW50aXR5VHlwZSA9IG1ldGFkYXRhU3RvcmUuX2dldFN0cnVjdHVyYWxUeXBlKGJhc2VUeXBlTmFtZSwgdHJ1ZSk7XHJcbiAgICBpZiAoYmFzZUVudGl0eVR5cGUpIHtcclxuICAgICAgY29tcGxldGVQYXJzZUNzZGxFbnRpdHlUeXBlKGVudGl0eVR5cGUsIGNzZGxFbnRpdHlUeXBlLCBzY2hlbWEsIHNjaGVtYXMsIG1ldGFkYXRhU3RvcmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGRlZmVycmFscyA9IG1ldGFkYXRhU3RvcmUuX2RlZmVycmVkVHlwZXNbYmFzZVR5cGVOYW1lXTtcclxuICAgICAgaWYgKCFkZWZlcnJhbHMpIHtcclxuICAgICAgICBkZWZlcnJhbHMgPSBbXTtcclxuICAgICAgICBtZXRhZGF0YVN0b3JlLl9kZWZlcnJlZFR5cGVzW2Jhc2VUeXBlTmFtZV0gPSBkZWZlcnJhbHM7XHJcbiAgICAgIH1cclxuICAgICAgZGVmZXJyYWxzLnB1c2goeyBlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZTogY3NkbEVudGl0eVR5cGUgfSk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbXBsZXRlUGFyc2VDc2RsRW50aXR5VHlwZShlbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZSwgc2NoZW1hLCBzY2hlbWFzLCBtZXRhZGF0YVN0b3JlKTtcclxuICB9XHJcbiAgLy8gZW50aXR5VHlwZSBtYXkgb3IgbWF5IG5vdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIG1ldGFkYXRhU3RvcmUgYXQgdGhpcyBwb2ludC5cclxuICByZXR1cm4gZW50aXR5VHlwZTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBsZXRlUGFyc2VDc2RsRW50aXR5VHlwZShlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZTogYW55LCBzY2hlbWE6IGFueSwgc2NoZW1hczogYW55LCBtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlKSB7XHJcbiAgbGV0IGtleU5hbWVzT25TZXJ2ZXIgPSBjc2RsRW50aXR5VHlwZS5rZXkgPyBjb3JlLnRvQXJyYXkoY3NkbEVudGl0eVR5cGUua2V5LnByb3BlcnR5UmVmKS5tYXAoY29yZS5wbHVjayhcIm5hbWVcIikpIDogW107XHJcblxyXG4gIGNvcmUudG9BcnJheShjc2RsRW50aXR5VHlwZS5wcm9wZXJ0eSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xyXG4gICAgcGFyc2VDc2RsRGF0YVByb3BlcnR5KGVudGl0eVR5cGUsIHByb3AsIHNjaGVtYSwga2V5TmFtZXNPblNlcnZlcik7XHJcbiAgfSk7XHJcblxyXG4gIGNvcmUudG9BcnJheShjc2RsRW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydHkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcclxuICAgIHBhcnNlQ3NkbE5hdlByb3BlcnR5KGVudGl0eVR5cGUsIHByb3AsIHNjaGVtYSwgc2NoZW1hcyk7XHJcbiAgfSk7XHJcblxyXG4gIG1ldGFkYXRhU3RvcmUuYWRkRW50aXR5VHlwZShlbnRpdHlUeXBlKTtcclxuICBlbnRpdHlUeXBlLmRlZmF1bHRSZXNvdXJjZU5hbWUgPSBtZXRhZGF0YVN0b3JlLl9lbnRpdHlUeXBlUmVzb3VyY2VNYXBbZW50aXR5VHlwZS5uYW1lXTtcclxuXHJcbiAgbGV0IGRlZmVycmVkVHlwZXMgPSBtZXRhZGF0YVN0b3JlLl9kZWZlcnJlZFR5cGVzO1xyXG4gIGxldCBkZWZlcnJhbHMgPSBkZWZlcnJlZFR5cGVzW2VudGl0eVR5cGUubmFtZV07XHJcbiAgaWYgKGRlZmVycmFscykge1xyXG4gICAgZGVmZXJyYWxzLmZvckVhY2goZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICBjb21wbGV0ZVBhcnNlQ3NkbEVudGl0eVR5cGUoZC5lbnRpdHlUeXBlLCBkLmNzZGxFbnRpdHlUeXBlLCBzY2hlbWEsIHNjaGVtYXMsIG1ldGFkYXRhU3RvcmUpO1xyXG4gICAgfSk7XHJcbiAgICBkZWxldGUgZGVmZXJyZWRUeXBlc1tlbnRpdHlUeXBlLm5hbWVdO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbENvbXBsZXhUeXBlKGNzZGxDb21wbGV4VHlwZTogYW55LCBzY2hlbWE6IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gIGxldCBzaG9ydE5hbWUgPSBjc2RsQ29tcGxleFR5cGUubmFtZTtcclxuICBsZXQgbnMgPSBnZXROYW1lc3BhY2VGb3Ioc2hvcnROYW1lLCBzY2hlbWEpO1xyXG4gIGxldCBjb21wbGV4VHlwZSA9IG5ldyBDb21wbGV4VHlwZSh7XHJcbiAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgIG5hbWVzcGFjZTogbnNcclxuICB9KTtcclxuXHJcbiAgY29yZS50b0FycmF5KGNzZGxDb21wbGV4VHlwZS5wcm9wZXJ0eSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xyXG4gICAgcGFyc2VDc2RsRGF0YVByb3BlcnR5KGNvbXBsZXhUeXBlLCBwcm9wLCBzY2hlbWEpO1xyXG4gIH0pO1xyXG5cclxuICBtZXRhZGF0YVN0b3JlLmFkZEVudGl0eVR5cGUoY29tcGxleFR5cGUpO1xyXG4gIHJldHVybiBjb21wbGV4VHlwZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc2RsRGF0YVByb3BlcnR5KHBhcmVudFR5cGU6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSwgY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55LCBrZXlOYW1lc09uU2VydmVyPzogc3RyaW5nW10pIHtcclxuICBsZXQgZHA6IERhdGFQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcclxuICBsZXQgdHlwZVBhcnRzID0gY3NkbFByb3BlcnR5LnR5cGUuc3BsaXQoXCIuXCIpO1xyXG4gIC8vIEJvdGggdGVzdHMgb24gdHlwZVBhcnRzIGFyZSBuZWNlc3NhcnkgYmVjYXVzZSBvZiBkaWZmZXJpbmcgbWV0YWRhdGEgY29udmVudGlvbnMgZm9yIE9EYXRhIGFuZCBFZG14IGZlZWRzLlxyXG4gIGlmICh0eXBlUGFydHNbMF0uZW5kc1dpdGgoXCJFZG1cIikgJiYgdHlwZVBhcnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgZHAgPSBwYXJzZUNzZGxTaW1wbGVQcm9wZXJ0eShwYXJlbnRUeXBlLCBjc2RsUHJvcGVydHksIGtleU5hbWVzT25TZXJ2ZXIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoaXNFbnVtVHlwZShjc2RsUHJvcGVydHksIHNjaGVtYSkpIHtcclxuICAgICAgZHAgPSBwYXJzZUNzZGxTaW1wbGVQcm9wZXJ0eShwYXJlbnRUeXBlLCBjc2RsUHJvcGVydHksIGtleU5hbWVzT25TZXJ2ZXIpO1xyXG4gICAgICBpZiAoZHApIHtcclxuICAgICAgICBkcC5lbnVtVHlwZSA9IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkcCA9IHBhcnNlQ3NkbENvbXBsZXhQcm9wZXJ0eShwYXJlbnRUeXBlLCBjc2RsUHJvcGVydHksIHNjaGVtYSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChkcCkge1xyXG4gICAgcGFyZW50VHlwZS5fYWRkUHJvcGVydHlDb3JlKGRwKTtcclxuICAgIGFkZFZhbGlkYXRvcnMoZHApO1xyXG4gIH1cclxuICByZXR1cm4gZHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbFNpbXBsZVByb3BlcnR5KHBhcmVudFR5cGU6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSwgY3NkbFByb3BlcnR5OiBhbnksIGtleU5hbWVzT25TZXJ2ZXI/OiBzdHJpbmdbXSkge1xyXG4gIGxldCBpc0NvbGxlY3Rpb25UeXBlID0gaXNDb2xsZWN0aW9uKGNzZGxQcm9wZXJ0eS50eXBlKTtcclxuICBsZXQgcHJvcGVydHlUeXBlID0gZ2V0Q29sbGVjdGlvblR5cGUoY3NkbFByb3BlcnR5LnR5cGUpIHx8IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gIGxldCBkYXRhVHlwZSA9IERhdGFUeXBlLmZyb21FZG1EYXRhVHlwZShwcm9wZXJ0eVR5cGUpO1xyXG4gIGlmIChkYXRhVHlwZSA9PSBudWxsKSB7XHJcbiAgICBwYXJlbnRUeXBlLndhcm5pbmdzLnB1c2goXCJVbmFibGUgdG8gcmVjb2duaXplIERhdGFUeXBlIGZvciBwcm9wZXJ0eTogXCIgKyBjc2RsUHJvcGVydHkubmFtZSArIFwiIERhdGVUeXBlOiBcIiArIGNzZGxQcm9wZXJ0eS50eXBlKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGxldCBpc051bGxhYmxlID0gY3NkbFByb3BlcnR5Lm51bGxhYmxlID09PSAndHJ1ZScgfHwgY3NkbFByb3BlcnR5Lm51bGxhYmxlID09IG51bGw7XHJcbiAgLy8gbGV0IGZpeGVkTGVuZ3RoID0gY3NkbFByb3BlcnR5LmZpeGVkTGVuZ3RoID8gY3NkbFByb3BlcnR5LmZpeGVkTGVuZ3RoID09PSB0cnVlIDogdW5kZWZpbmVkO1xyXG4gIGxldCBpc1BhcnRPZktleSA9IGtleU5hbWVzT25TZXJ2ZXIgIT0gbnVsbCAmJiBrZXlOYW1lc09uU2VydmVyLmluZGV4T2YoY3NkbFByb3BlcnR5Lm5hbWUpID49IDA7XHJcbiAgaWYgKGlzUGFydE9mS2V5ICYmIHBhcmVudFR5cGUgaW5zdGFuY2VvZiBFbnRpdHlUeXBlICYmIHBhcmVudFR5cGUuYXV0b0dlbmVyYXRlZEtleVR5cGUgPT09IEF1dG9HZW5lcmF0ZWRLZXlUeXBlLk5vbmUpIHtcclxuICAgIGlmIChpc0lkZW50aXR5UHJvcGVydHkoY3NkbFByb3BlcnR5KSkge1xyXG4gICAgICBwYXJlbnRUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlID0gQXV0b0dlbmVyYXRlZEtleVR5cGUuSWRlbnRpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFRPRE86IG5pdCAtIGRvbid0IHNldCBtYXhMZW5ndGggaWYgbnVsbDtcclxuICBsZXQgbWF4TGVuZ3RoID0gY3NkbFByb3BlcnR5Lm1heExlbmd0aDtcclxuICBtYXhMZW5ndGggPSAobWF4TGVuZ3RoID09IG51bGwgfHwgbWF4TGVuZ3RoID09PSBcIk1heFwiKSA/IG51bGwgOiBwYXJzZUludChtYXhMZW5ndGgsIDEwKTtcclxuICAvLyBjYW4ndCBzZXQgdGhlIG5hbWUgdW50aWwgd2UgZ28gdGhydSBuYW1pbmdDb252ZW50aW9ucyBhbmQgdGhlc2UgbmVlZCB0aGUgZHAuXHJcblxyXG4gIGxldCBkcCA9IG5ldyBEYXRhUHJvcGVydHkoe1xyXG4gICAgbmFtZU9uU2VydmVyOiBjc2RsUHJvcGVydHkubmFtZSxcclxuICAgIGRhdGFUeXBlOiBkYXRhVHlwZSxcclxuICAgIGlzTnVsbGFibGU6IGlzTnVsbGFibGUsXHJcbiAgICBpc1BhcnRPZktleTogaXNQYXJ0T2ZLZXksXHJcbiAgICBpc1NjYWxhcjogIWlzQ29sbGVjdGlvblR5cGUsXHJcbiAgICBtYXhMZW5ndGg6IG1heExlbmd0aCxcclxuICAgIGRlZmF1bHRWYWx1ZTogY3NkbFByb3BlcnR5LmRlZmF1bHRWYWx1ZSxcclxuICAgIC8vIGZpeGVkTGVuZ3RoOiBmaXhlZExlbmd0aCxcclxuICAgIGNvbmN1cnJlbmN5TW9kZTogY3NkbFByb3BlcnR5LmNvbmN1cnJlbmN5TW9kZVxyXG4gIH0pO1xyXG5cclxuICBpZiAoZGF0YVR5cGUgPT09IERhdGFUeXBlLlVuZGVmaW5lZCkge1xyXG4gICAgZHAucmF3VHlwZU5hbWUgPSBjc2RsUHJvcGVydHkudHlwZTtcclxuICB9XHJcbiAgcmV0dXJuIGRwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxDb21wbGV4UHJvcGVydHkocGFyZW50VHlwZTogRW50aXR5VHlwZSB8IENvbXBsZXhUeXBlLCBjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnkpIHtcclxuXHJcbiAgLy8gQ29tcGxleCBwcm9wZXJ0aWVzIGFyZSBuZXZlciBudWxsYWJsZSAoIHBlciBFRiBzcGVjcylcclxuICAvLyBsZXQgaXNOdWxsYWJsZSA9IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PT0gJ3RydWUnIHx8IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PSBudWxsO1xyXG4gIC8vIGxldCBjb21wbGV4VHlwZU5hbWUgPSBjc2RsUHJvcGVydHkudHlwZS5zcGxpdChcIkVkbS5cIilbMV07XHJcbiAgbGV0IGlzQ29sbGVjdGlvblR5cGUgPSBpc0NvbGxlY3Rpb24oY3NkbFByb3BlcnR5LnR5cGUpO1xyXG4gIGxldCBwcm9wZXJ0eVR5cGUgPSBnZXRDb2xsZWN0aW9uVHlwZShjc2RsUHJvcGVydHkudHlwZSkgfHwgY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgbGV0IGNvbXBsZXhUeXBlTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKHByb3BlcnR5VHlwZSwgc2NoZW1hKS50eXBlTmFtZTtcclxuICAvLyBjYW4ndCBzZXQgdGhlIG5hbWUgdW50aWwgd2UgZ28gdGhydSBuYW1pbmdDb252ZW50aW9ucyBhbmQgdGhlc2UgbmVlZCB0aGUgZHAuXHJcbiAgbGV0IGRwID0gbmV3IERhdGFQcm9wZXJ0eSh7XHJcbiAgICBuYW1lT25TZXJ2ZXI6IGNzZGxQcm9wZXJ0eS5uYW1lLFxyXG4gICAgY29tcGxleFR5cGVOYW1lOiBjb21wbGV4VHlwZU5hbWUsXHJcbiAgICBpc051bGxhYmxlOiBmYWxzZSxcclxuICAgIGlzU2NhbGFyOiAhaXNDb2xsZWN0aW9uVHlwZVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gZHA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbE5hdlByb3BlcnR5KGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSwgc2NoZW1hczogYW55W10pIHtcclxuICBsZXQgYXNzb2NpYXRpb24gPSBnZXRBc3NvY2lhdGlvbihjc2RsUHJvcGVydHksIHNjaGVtYSwgc2NoZW1hcyk7XHJcbiAgaWYgKCFhc3NvY2lhdGlvbikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHJlc29sdmUgRm9yZWlnbiBLZXkgQXNzb2NpYXRpb246IFwiICsgY3NkbFByb3BlcnR5LnJlbGF0aW9uc2hpcCk7XHJcbiAgfVxyXG4gIGxldCB0b0VuZCA9IGNvcmUuYXJyYXlGaXJzdChhc3NvY2lhdGlvbi5lbmQsIChhc3NvY0VuZCkgPT4ge1xyXG4gICAgcmV0dXJuIGFzc29jRW5kLnJvbGUgPT09IGNzZGxQcm9wZXJ0eS50b1JvbGU7XHJcbiAgfSk7XHJcblxyXG4gIGxldCBpc1NjYWxhciA9IHRvRW5kIS5tdWx0aXBsaWNpdHkgIT09IFwiKlwiO1xyXG4gIGxldCBkYXRhVHlwZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKHRvRW5kIS50eXBlLCBzY2hlbWEpLnR5cGVOYW1lO1xyXG5cclxuICBsZXQgY29uc3RyYWludCA9IGFzc29jaWF0aW9uLnJlZmVyZW50aWFsQ29uc3RyYWludDtcclxuICBpZiAoIWNvbnN0cmFpbnQpIHtcclxuICAgIC8vIFRPRE86IFJldmlzaXQgdGhpcyBsYXRlciAtIHJpZ2h0IG5vdyB3ZSBqdXN0IGlnbm9yZSBtYW55LW1hbnkgYW5kIGFzc29jcyB3aXRoIG1pc3NpbmcgY29uc3RyYWludHMuXHJcblxyXG4gICAgLy8gVGhpbmsgYWJvdXQgYWRkaW5nIHRoaXMgYmFjayBsYXRlci5cclxuICAgIGlmIChhc3NvY2lhdGlvbi5lbmRbMF0ubXVsdGlwbGljaXR5ID09PSBcIipcIiAmJiBhc3NvY2lhdGlvbi5lbmRbMV0ubXVsdGlwbGljaXR5ID09PSBcIipcIikge1xyXG4gICAgICAvLyBpZ25vcmUgbWFueSB0byBtYW55IHJlbGF0aW9ucyBmb3Igbm93XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBub3cgYXNzdW1lIGl0IHdpbGwgYmUgc2V0IGxhdGVyIGRpcmVjdGx5IG9uIHRoZSBjbGllbnQuXHJcbiAgICAgIC8vIG90aGVyIGFsdGVybmF0aXZlIGlzIHRvIHRocm93IGFuIGVycm9yOlxyXG4gICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCJGb3JlaWduIEtleSBBc3NvY2lhdGlvbnMgbXVzdCBiZSB0dXJuZWQgb24gZm9yIHRoaXMgbW9kZWxcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGxldCBjZmcgPSB7XHJcbiAgICBuYW1lT25TZXJ2ZXI6IGNzZGxQcm9wZXJ0eS5uYW1lLFxyXG4gICAgZW50aXR5VHlwZU5hbWU6IGRhdGFUeXBlLFxyXG4gICAgaXNTY2FsYXI6IGlzU2NhbGFyLFxyXG4gICAgYXNzb2NpYXRpb25OYW1lOiBhc3NvY2lhdGlvbi5uYW1lLFxyXG4gIH07XHJcblxyXG4gIGlmIChjb25zdHJhaW50KSB7XHJcbiAgICBsZXQgcHJpbmNpcGFsID0gY29uc3RyYWludC5wcmluY2lwYWw7XHJcbiAgICBsZXQgZGVwZW5kZW50ID0gY29uc3RyYWludC5kZXBlbmRlbnQ7XHJcblxyXG4gICAgbGV0IHByb3BSZWZzID0gY29yZS50b0FycmF5KGRlcGVuZGVudC5wcm9wZXJ0eVJlZik7XHJcbiAgICBsZXQgZmtOYW1lcyA9IHByb3BSZWZzLm1hcChjb3JlLnBsdWNrKFwibmFtZVwiKSk7XHJcbiAgICBpZiAoY3NkbFByb3BlcnR5LmZyb21Sb2xlID09PSBwcmluY2lwYWwucm9sZSkge1xyXG4gICAgICAoY2ZnIGFzIGFueSkuaW52Rm9yZWlnbktleU5hbWVzT25TZXJ2ZXIgPSBma05hbWVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gd2lsbCBiZSB1c2VkIGxhdGVyIGJ5IG5wLl91cGRhdGVcclxuICAgICAgKGNmZyBhcyBhbnkpLmZvcmVpZ25LZXlOYW1lc09uU2VydmVyID0gZmtOYW1lcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxldCBucCA9IG5ldyBOYXZpZ2F0aW9uUHJvcGVydHkoY2ZnKTtcclxuICBlbnRpdHlUeXBlLl9hZGRQcm9wZXJ0eUNvcmUobnApO1xyXG4gIHJldHVybiBucDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKHByb3BlcnR5VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIFJYX0NPTExFQ1RJT04udGVzdChwcm9wZXJ0eVR5cGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VudW1UeXBlKGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSkge1xyXG4gIGlmIChzY2hlbWEuZW51bVR5cGUpIHJldHVybiBpc0VkbXhFbnVtVHlwZShjc2RsUHJvcGVydHksIHNjaGVtYSk7XHJcbiAgZWxzZSBpZiAoc2NoZW1hLmV4dGVuc2lvbnMpIHJldHVybiBpc09EYXRhRW51bVR5cGUoY3NkbFByb3BlcnR5LCBzY2hlbWEpO1xyXG4gIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc0VkbXhFbnVtVHlwZShjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnkpIHtcclxuICBsZXQgZW51bVR5cGVzID0gY29yZS50b0FycmF5KHNjaGVtYS5lbnVtVHlwZSk7XHJcbiAgbGV0IHByb3BlcnR5VHlwZSA9IGdldENvbGxlY3Rpb25UeXBlKGNzZGxQcm9wZXJ0eS50eXBlKSB8fCBjc2RsUHJvcGVydHkudHlwZTtcclxuICBsZXQgdHlwZVBhcnRzID0gcHJvcGVydHlUeXBlLnNwbGl0KFwiLlwiKTtcclxuICBsZXQgYmFzZVR5cGVOYW1lID0gdHlwZVBhcnRzW3R5cGVQYXJ0cy5sZW5ndGggLSAxXTtcclxuICByZXR1cm4gZW51bVR5cGVzLnNvbWUoZnVuY3Rpb24gKGVudW1UeXBlKSB7XHJcbiAgICByZXR1cm4gZW51bVR5cGUubmFtZSA9PT0gYmFzZVR5cGVOYW1lO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc09EYXRhRW51bVR5cGUoY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55KSB7XHJcbiAgbGV0IGVudW1UeXBlcyA9IHNjaGVtYS5leHRlbnNpb25zLmZpbHRlcigoZXh0OiBhbnkpID0+IHtcclxuICAgIHJldHVybiBleHQubmFtZSA9PT0gXCJFbnVtVHlwZVwiO1xyXG4gIH0pO1xyXG4gIGxldCBwcm9wZXJ0eVR5cGUgPSBnZXRDb2xsZWN0aW9uVHlwZShjc2RsUHJvcGVydHkudHlwZSkgfHwgY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgbGV0IHR5cGVQYXJ0cyA9IHByb3BlcnR5VHlwZS5zcGxpdChcIi5cIik7XHJcbiAgbGV0IGJhc2VUeXBlTmFtZSA9IHR5cGVQYXJ0c1t0eXBlUGFydHMubGVuZ3RoIC0gMV07XHJcbiAgcmV0dXJuIGVudW1UeXBlcy5zb21lKChlbnVtVHlwZTogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gZW51bVR5cGUuYXR0cmlidXRlcy5zb21lKChhdHRyOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGF0dHIubmFtZSA9PT0gXCJOYW1lXCIgJiYgYXR0ci52YWx1ZSA9PT0gYmFzZVR5cGVOYW1lO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFZhbGlkYXRvcnMoZGF0YVByb3BlcnR5OiBEYXRhUHJvcGVydHkpIHtcclxuICBsZXQgdHlwZVZhbGlkYXRvcjogVmFsaWRhdG9yO1xyXG4gIGlmICghZGF0YVByb3BlcnR5LmlzTnVsbGFibGUpIHtcclxuICAgIGRhdGFQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnJlcXVpcmVkKCkpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGRhdGFQcm9wZXJ0eS5pc0NvbXBsZXhQcm9wZXJ0eSkgcmV0dXJuO1xyXG5cclxuICBpZiAoZGF0YVByb3BlcnR5LmRhdGFUeXBlID09PSBEYXRhVHlwZS5TdHJpbmcpIHtcclxuICAgIGlmIChkYXRhUHJvcGVydHkubWF4TGVuZ3RoKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JBcmdzID0geyBtYXhMZW5ndGg6IGRhdGFQcm9wZXJ0eS5tYXhMZW5ndGggfTtcclxuICAgICAgdHlwZVZhbGlkYXRvciA9IFZhbGlkYXRvci5tYXhMZW5ndGgodmFsaWRhdG9yQXJncyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0eXBlVmFsaWRhdG9yID0gVmFsaWRhdG9yLnN0cmluZygpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JDdG9yID0gKGRhdGFQcm9wZXJ0eS5kYXRhVHlwZSBhcyBhbnkpLnZhbGlkYXRvckN0b3I7XHJcbiAgICAgIGlmICghdmFsaWRhdG9yQ3RvcikgcmV0dXJuO1xyXG4gICAgICB0eXBlVmFsaWRhdG9yID0gdmFsaWRhdG9yQ3RvcigpO1xyXG4gIH1cclxuXHJcbiAgZGF0YVByb3BlcnR5LnZhbGlkYXRvcnMucHVzaCh0eXBlVmFsaWRhdG9yKTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSWRlbnRpdHlQcm9wZXJ0eShjc2RsUHJvcGVydHk6IGFueSkge1xyXG4gIC8vIHNlZSBpZiB3ZWIgYXBpIGZlZWRcclxuICBsZXQgcHJvcE5hbWUgPSBjb3JlLmFycmF5Rmlyc3QoT2JqZWN0LmtleXMoY3NkbFByb3BlcnR5KSwgKHBuKSA9PiB7XHJcbiAgICByZXR1cm4gcG4uaW5kZXhPZihcIlN0b3JlR2VuZXJhdGVkUGF0dGVyblwiKSA+PSAwO1xyXG4gIH0pO1xyXG4gIGlmIChwcm9wTmFtZSkge1xyXG4gICAgcmV0dXJuIChjc2RsUHJvcGVydHlbcHJvcE5hbWVdID09PSBcIklkZW50aXR5XCIpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBzZWUgaWYgT2RhdGEgZmVlZFxyXG4gICAgbGV0IGV4dGVuc2lvbnMgPSBjc2RsUHJvcGVydHkuZXh0ZW5zaW9ucztcclxuICAgIGlmICghZXh0ZW5zaW9ucykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgaWRlbnRpdHlFeHRuID0gY29yZS5hcnJheUZpcnN0KGV4dGVuc2lvbnMsIChleHRlbnNpb24pID0+IHtcclxuICAgICAgcmV0dXJuIGV4dGVuc2lvbi5uYW1lID09PSBcIlN0b3JlR2VuZXJhdGVkUGF0dGVyblwiICYmIGV4dGVuc2lvbi52YWx1ZSA9PT0gXCJJZGVudGl0eVwiO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gISFpZGVudGl0eUV4dG47XHJcbiAgfVxyXG59XHJcblxyXG4vLyBGYXN0IHZlcnNpb25cclxuLy8gbnA6IHNjaGVtYS5lbnRpdHlUeXBlW10ubmF2aWdhdGlvblByb3BlcnR5LnJlbGF0aW9uc2hpcCAtPiBzY2hlbWEuYXNzb2NpYXRpb25cclxuLy8gICBtYXRjaCggc2hvcnROYW1lKG5wLnJlbGF0aW9uc2hpcCkgPT0gc2NoZW1hLmFzc29jaWF0aW9uW10ubmFtZVxyXG4vLyAgICAgIC0tPiBhc3NvY2lhdGlvbl9fXHJcblxyXG4vLyBDb3JyZWN0IHZlcnNpb25cclxuLy8gbnA6IHNjaGVtYS5lbnRpdHlUeXBlW10ubmF2aWdhdGlvblByb3BlcnR5LnJlbGF0aW9uc2hpcCAtPiBzY2hlbWEuYXNzb2NpYXRpb25cclxuLy8gICBtYXRjaCggbnAucmVsYXRpb25zaGlwID09IHNjaGVtYS5lbnRpdHlDb250YWluZXJbMF0uYXNzb2NpYXRpb25TZXRbXS5hc3NvY2lhdGlvbiApXHJcbi8vICAgICAgLT4gYXNzb2NpYXRpb25TZXQubmFtZVxyXG4vLyAgIG1hdGNoICggYXNzb2NpYXRpb25TZXQubmFtZSA9PSBzY2hlbWEuYXNzb2NpYXRpb25bXS5uYW1lIClcclxuLy8gICAgICAtPiBhc3NvY2lhdGlvblxyXG5cclxuZnVuY3Rpb24gZ2V0QXNzb2NpYXRpb24oY3NkbE5hdlByb3BlcnR5OiBhbnksIGNvbnRhaW5pbmdTY2hlbWE6IGFueSwgc2NoZW1hczogYW55W10pIHtcclxuICBsZXQgYXNzb2NGdWxsTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKGNzZGxOYXZQcm9wZXJ0eS5yZWxhdGlvbnNoaXAsIGNvbnRhaW5pbmdTY2hlbWEpO1xyXG4gIGxldCBhc3NvY05hbWVzcGFjZSA9IGFzc29jRnVsbE5hbWUubmFtZXNwYWNlO1xyXG4gIGxldCBhc3NvY1NjaGVtYSA9IGNvcmUuYXJyYXlGaXJzdChzY2hlbWFzLCAoc2NoZW1hKSA9PiB7XHJcbiAgICByZXR1cm4gc2NoZW1hLm5hbWVzcGFjZSA9PT0gYXNzb2NOYW1lc3BhY2U7XHJcbiAgfSk7XHJcbiAgaWYgKCFhc3NvY1NjaGVtYSkgcmV0dXJuIG51bGw7XHJcblxyXG4gIGxldCBhc3NvY05hbWUgPSBhc3NvY0Z1bGxOYW1lLnNob3J0VHlwZU5hbWU7XHJcbiAgbGV0IGFzc29jcyA9IGFzc29jU2NoZW1hLmFzc29jaWF0aW9uO1xyXG4gIGlmICghYXNzb2NzKSByZXR1cm4gbnVsbDtcclxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NzKSkge1xyXG4gICAgYXNzb2NzID0gW2Fzc29jc107XHJcbiAgfVxyXG4gIGxldCBhc3NvY2lhdGlvbiA9IGNvcmUuYXJyYXlGaXJzdChhc3NvY3MsIChhc3NvYykgPT4ge1xyXG4gICAgcmV0dXJuIGFzc29jLm5hbWUgPT09IGFzc29jTmFtZTtcclxuICB9KTtcclxuICByZXR1cm4gYXNzb2NpYXRpb24gYXMgSUFzc29jaWF0aW9uO1xyXG59XHJcblxyXG4vLyBzY2hlbWEgaXMgb25seSBuZWVkZWQgZm9yIG5hdlByb3BlcnR5IHR5cGUgbmFtZVxyXG5mdW5jdGlvbiBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYShlbnRpdHlUeXBlTmFtZTogc3RyaW5nLCBzY2hlbWE6IGFueSkge1xyXG4gIGxldCByZXN1bHQgPSBNZXRhZGF0YVN0b3JlLnBhcnNlVHlwZU5hbWUoZW50aXR5VHlwZU5hbWUpO1xyXG4gIGlmIChzY2hlbWEgJiYgc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcpIHtcclxuICAgIGxldCBucyA9IGdldE5hbWVzcGFjZUZvcihyZXN1bHQhLnNob3J0VHlwZU5hbWUsIHNjaGVtYSk7XHJcbiAgICBpZiAobnMpIHtcclxuICAgICAgcmVzdWx0ID0gTWV0YWRhdGFTdG9yZS5tYWtlVHlwZUhhc2gocmVzdWx0IS5zaG9ydFR5cGVOYW1lLCBucyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbGxlY3Rpb25UeXBlKHByb3BlcnR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBtYXRjaCA9IHByb3BlcnR5VHlwZS5tYXRjaChSWF9DT0xMRUNUSU9OKTtcclxuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFtcImdyb3Vwc1wiXS50eXBlIDogbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRm9yKHNob3J0TmFtZTogc3RyaW5nLCBzY2hlbWE6IGFueSkge1xyXG4gIGxldCBuczogc3RyaW5nO1xyXG4gIGxldCBtYXBwaW5nID0gc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmc7XHJcbiAgaWYgKG1hcHBpbmcpIHtcclxuICAgIGxldCBmdWxsTmFtZSA9IG1hcHBpbmdbc2NoZW1hLm5hbWVzcGFjZSArIFwiLlwiICsgc2hvcnROYW1lXTtcclxuICAgIG5zID0gZnVsbE5hbWUgJiYgZnVsbE5hbWUuc3Vic3RyKDAsIGZ1bGxOYW1lLmxlbmd0aCAtIChzaG9ydE5hbWUubGVuZ3RoICsgMSkpO1xyXG4gICAgaWYgKG5zKSByZXR1cm4gbnM7XHJcbiAgfVxyXG4gIC8vIGlmIHNjaGVtYSBkb2VzIG5vdCBhbHNvIGhhdmUgYW4gZW50aXR5VHlwZSBub2RlIHRoZW5cclxuICAvLyB0aGlzIGlzIGFuIFdlYkFwaTIgT0RhdGEgc2NoZW1hIHdoaWNoIGlzIHVzdWFsbHkgZXF1YWwgdG8gJ0RlZmF1bHQnOyB3aGljaCBpcyB1c2VsZXNzLlxyXG4gIGlmIChzY2hlbWEuZW50aXR5VHlwZSB8fCBzY2hlbWEubmFtZXNwYWNlICE9PSAnRGVmYXVsdCcpIHtcclxuICAgIHJldHVybiBzY2hlbWEubmFtZXNwYWNlO1xyXG4gIH1cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbmV4cG9ydCBjb25zdCBDc2RsTWV0YWRhdGFQYXJzZXIgPSB7XHJcbiAgcGFyc2U6IHBhcnNlXHJcbn07XHJcbiJdfQ==
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NkbC1tZXRhZGF0YS1wYXJzZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL2NzZGwtbWV0YWRhdGEtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25JLE9BQU8sRUFBRSxRQUFRLEVBQUcsTUFBTSxhQUFhLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWN2QyxJQUFNLGFBQWEsR0FBSSxvQkFBb0IsQ0FBQztBQUU1QyxTQUFTLEtBQUssQ0FBQyxhQUE0QixFQUFFLE9BQVksRUFBRSxXQUFnQjtJQUV6RSxhQUFhLENBQUMsc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFXO1FBQ25DLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFO1lBQzlCLHFDQUFxQztZQUNyQyx5RkFBeUY7WUFDekYsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN0RCxJQUFJLFFBQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE9BQVk7Z0JBQ3JDLFFBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsbUJBQW1CLEdBQUcsUUFBTSxDQUFDO1NBQ3JD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WUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsTUFBVztJQUNyRCxJQUFJLEVBQVUsQ0FBQztJQUNmLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUN6QyxJQUFJLE9BQU8sRUFBRTtRQUNYLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQztRQUMzRCxFQUFFLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7S0FDbkI7SUFDRCx1REFBdUQ7SUFDdkQseUZBQXlGO0lBQ3pGLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtRQUN2RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUM7S0FDekI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCx3QkFBd0I7QUFDeEIsTUFBTSxDQUFDLElBQU0sa0JBQWtCLEdBQUc7SUFDaEMsS0FBSyxFQUFFLEtBQUs7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU3RvcmUsIEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBEYXRhUHJvcGVydHksIE5hdmlnYXRpb25Qcm9wZXJ0eSwgQXV0b0dlbmVyYXRlZEtleVR5cGUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IERhdGFUeXBlICB9IGZyb20gJy4vZGF0YS10eXBlJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0ZSc7XHJcblxyXG5pbnRlcmZhY2UgSUFzc29jaWF0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZW5kOiBJRW5kW107XHJcbiAgcmVmZXJlbnRpYWxDb25zdHJhaW50OiBhbnk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBJRW5kIHtcclxuICBtdWx0aXBsaWNpdHk6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgcm9sZTogc3RyaW5nO1xyXG59XHJcblxyXG5jb25zdCBSWF9DT0xMRUNUSU9OID0gIC9Db2xsZWN0aW9uXFwoKC4qKVxcKS87XHJcblxyXG5mdW5jdGlvbiBwYXJzZShtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlLCBzY2hlbWFzOiBhbnksIGFsdE1ldGFkYXRhOiBhbnkpIHtcclxuXHJcbiAgbWV0YWRhdGFTdG9yZS5fZW50aXR5VHlwZVJlc291cmNlTWFwID0ge307XHJcbiAgc2NoZW1hcyA9IGNvcmUudG9BcnJheShzY2hlbWFzKTtcclxuICBzY2hlbWFzLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtYTogYW55KSB7XHJcbiAgICBpZiAoc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcpIHtcclxuICAgICAgLy8gV2ViIGFwaSBvbmx5IC0gbm90IGF2YWlsIGluIE9EYXRhLlxyXG4gICAgICAvLyBUT0RPIHRocm93IGluZm9ybWF0aXZlIGVycm9yIGlmIGFscmVhZHkgcGFyc2VkIGFuZCBjb252ZXJ0ZWQgdG8gbWFwIG9uIGEgcHJldmlvdXMgcGFzc1xyXG4gICAgICBsZXQgbWFwcGluZ3MgPSBKU09OLnBhcnNlKHNjaGVtYS5jU3BhY2VPU3BhY2VNYXBwaW5nKTtcclxuICAgICAgbGV0IG5ld01hcCA9IHt9O1xyXG4gICAgICBtYXBwaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChtYXBwaW5nOiBhbnkpIHtcclxuICAgICAgICBuZXdNYXBbbWFwcGluZ1swXV0gPSBtYXBwaW5nWzFdO1xyXG4gICAgICB9KTtcclxuICAgICAgc2NoZW1hLmNTcGFjZU9TcGFjZU1hcHBpbmcgPSBuZXdNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNjaGVtYS5lbnRpdHlDb250YWluZXIpIHtcclxuICAgICAgY29yZS50b0FycmF5KHNjaGVtYS5lbnRpdHlDb250YWluZXIpLmZvckVhY2goZnVuY3Rpb24gKGNvbnRhaW5lcikge1xyXG4gICAgICAgIGNvcmUudG9BcnJheShjb250YWluZXIuZW50aXR5U2V0KS5mb3JFYWNoKGZ1bmN0aW9uIChlbnRpdHlTZXQpIHtcclxuICAgICAgICAgIGxldCBlbnRpdHlUeXBlTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKGVudGl0eVNldC5lbnRpdHlUeXBlLCBzY2hlbWEpLnR5cGVOYW1lO1xyXG4gICAgICAgICAgbWV0YWRhdGFTdG9yZS5zZXRFbnRpdHlUeXBlRm9yUmVzb3VyY2VOYW1lKGVudGl0eVNldC5uYW1lLCBlbnRpdHlUeXBlTmFtZSk7XHJcbiAgICAgICAgICBtZXRhZGF0YVN0b3JlLl9lbnRpdHlUeXBlUmVzb3VyY2VNYXBbZW50aXR5VHlwZU5hbWVdID0gZW50aXR5U2V0Lm5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByb2Nlc3MgY29tcGxleHR5cGVzIGJlZm9yZSBlbnRpdHkgdHlwZXMuXHJcbiAgICBpZiAoc2NoZW1hLmNvbXBsZXhUeXBlKSB7XHJcbiAgICAgIGNvcmUudG9BcnJheShzY2hlbWEuY29tcGxleFR5cGUpLmZvckVhY2goZnVuY3Rpb24gKGN0KSB7XHJcbiAgICAgICAgcGFyc2VDc2RsQ29tcGxleFR5cGUoY3QsIHNjaGVtYSwgbWV0YWRhdGFTdG9yZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNjaGVtYS5lbnRpdHlUeXBlKSB7XHJcbiAgICAgIGNvcmUudG9BcnJheShzY2hlbWEuZW50aXR5VHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoZXQpIHtcclxuICAgICAgICBwYXJzZUNzZGxFbnRpdHlUeXBlKGV0LCBzY2hlbWEsIHNjaGVtYXMsIG1ldGFkYXRhU3RvcmUpO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG4gIGxldCBiYWROYXZQcm9wcyA9IG1ldGFkYXRhU3RvcmUuZ2V0SW5jb21wbGV0ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzKCk7XHJcbiAgaWYgKGJhZE5hdlByb3BzLmxlbmd0aCA+IDApIHtcclxuICAgIGxldCBtc2cgPSBiYWROYXZQcm9wcy5tYXAoZnVuY3Rpb24gKG5wYSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShucGEpKSB7XHJcbiAgICAgICAgcmV0dXJuIG5wYS5tYXAoZnVuY3Rpb24gKG5wKSB7XHJcbiAgICAgICAgICByZXR1cm4gbnAucGFyZW50VHlwZS5uYW1lICsgXCI6XCIgKyBucC5uYW1lO1xyXG4gICAgICAgIH0pLmpvaW4oJywgJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5wYS5wYXJlbnRUeXBlLm5hbWUgKyBcIjpcIiArIG5wYS5uYW1lO1xyXG4gICAgfSkuam9pbignLCAnKTtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIkluY29tcGxldGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzOiBcIiArIG1zZyk7XHJcbiAgfVxyXG4gIGlmIChhbHRNZXRhZGF0YSkge1xyXG4gICAgbWV0YWRhdGFTdG9yZS5pbXBvcnRNZXRhZGF0YShhbHRNZXRhZGF0YSwgdHJ1ZSk7XHJcbiAgfVxyXG4gIHJldHVybiBtZXRhZGF0YVN0b3JlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxFbnRpdHlUeXBlKGNzZGxFbnRpdHlUeXBlOiBhbnksIHNjaGVtYTogYW55LCBzY2hlbWFzOiBhbnksIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUpIHtcclxuICBsZXQgc2hvcnROYW1lID0gY3NkbEVudGl0eVR5cGUubmFtZTtcclxuICBsZXQgbnMgPSBnZXROYW1lc3BhY2VGb3Ioc2hvcnROYW1lLCBzY2hlbWEpO1xyXG4gIGxldCBlbnRpdHlUeXBlID0gbmV3IEVudGl0eVR5cGUoe1xyXG4gICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICBuYW1lc3BhY2U6IG5zLFxyXG4gICAgaXNBYnN0cmFjdDogY3NkbEVudGl0eVR5cGUuYWJzdHJhY3QgJiYgY3NkbEVudGl0eVR5cGUuYWJzdHJhY3QgPT09ICd0cnVlJ1xyXG4gIH0pO1xyXG4gIGlmIChjc2RsRW50aXR5VHlwZS5iYXNlVHlwZSkge1xyXG4gICAgbGV0IGJhc2VUeXBlTmFtZSA9IHBhcnNlVHlwZU5hbWVXaXRoU2NoZW1hKGNzZGxFbnRpdHlUeXBlLmJhc2VUeXBlLCBzY2hlbWEpLnR5cGVOYW1lO1xyXG4gICAgZW50aXR5VHlwZS5iYXNlVHlwZU5hbWUgPSBiYXNlVHlwZU5hbWU7XHJcbiAgICBsZXQgYmFzZUVudGl0eVR5cGUgPSBtZXRhZGF0YVN0b3JlLl9nZXRTdHJ1Y3R1cmFsVHlwZShiYXNlVHlwZU5hbWUsIHRydWUpO1xyXG4gICAgaWYgKGJhc2VFbnRpdHlUeXBlKSB7XHJcbiAgICAgIGNvbXBsZXRlUGFyc2VDc2RsRW50aXR5VHlwZShlbnRpdHlUeXBlLCBjc2RsRW50aXR5VHlwZSwgc2NoZW1hLCBzY2hlbWFzLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkZWZlcnJhbHMgPSBtZXRhZGF0YVN0b3JlLl9kZWZlcnJlZFR5cGVzW2Jhc2VUeXBlTmFtZV07XHJcbiAgICAgIGlmICghZGVmZXJyYWxzKSB7XHJcbiAgICAgICAgZGVmZXJyYWxzID0gW107XHJcbiAgICAgICAgbWV0YWRhdGFTdG9yZS5fZGVmZXJyZWRUeXBlc1tiYXNlVHlwZU5hbWVdID0gZGVmZXJyYWxzO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmVycmFscy5wdXNoKHsgZW50aXR5VHlwZTogZW50aXR5VHlwZSwgY3NkbEVudGl0eVR5cGU6IGNzZGxFbnRpdHlUeXBlIH0pO1xyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb21wbGV0ZVBhcnNlQ3NkbEVudGl0eVR5cGUoZW50aXR5VHlwZSwgY3NkbEVudGl0eVR5cGUsIHNjaGVtYSwgc2NoZW1hcywgbWV0YWRhdGFTdG9yZSk7XHJcbiAgfVxyXG4gIC8vIGVudGl0eVR5cGUgbWF5IG9yIG1heSBub3QgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBtZXRhZGF0YVN0b3JlIGF0IHRoaXMgcG9pbnQuXHJcbiAgcmV0dXJuIGVudGl0eVR5cGU7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21wbGV0ZVBhcnNlQ3NkbEVudGl0eVR5cGUoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgY3NkbEVudGl0eVR5cGU6IGFueSwgc2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueSwgbWV0YWRhdGFTdG9yZTogTWV0YWRhdGFTdG9yZSkge1xyXG4gIGxldCBrZXlOYW1lc09uU2VydmVyID0gY3NkbEVudGl0eVR5cGUua2V5ID8gY29yZS50b0FycmF5KGNzZGxFbnRpdHlUeXBlLmtleS5wcm9wZXJ0eVJlZikubWFwKGNvcmUucGx1Y2soXCJuYW1lXCIpKSA6IFtdO1xyXG5cclxuICBjb3JlLnRvQXJyYXkoY3NkbEVudGl0eVR5cGUucHJvcGVydHkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcclxuICAgIHBhcnNlQ3NkbERhdGFQcm9wZXJ0eShlbnRpdHlUeXBlLCBwcm9wLCBzY2hlbWEsIGtleU5hbWVzT25TZXJ2ZXIpO1xyXG4gIH0pO1xyXG5cclxuICBjb3JlLnRvQXJyYXkoY3NkbEVudGl0eVR5cGUubmF2aWdhdGlvblByb3BlcnR5KS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XHJcbiAgICBwYXJzZUNzZGxOYXZQcm9wZXJ0eShlbnRpdHlUeXBlLCBwcm9wLCBzY2hlbWEsIHNjaGVtYXMpO1xyXG4gIH0pO1xyXG5cclxuICBtZXRhZGF0YVN0b3JlLmFkZEVudGl0eVR5cGUoZW50aXR5VHlwZSk7XHJcbiAgZW50aXR5VHlwZS5kZWZhdWx0UmVzb3VyY2VOYW1lID0gbWV0YWRhdGFTdG9yZS5fZW50aXR5VHlwZVJlc291cmNlTWFwW2VudGl0eVR5cGUubmFtZV07XHJcblxyXG4gIGxldCBkZWZlcnJlZFR5cGVzID0gbWV0YWRhdGFTdG9yZS5fZGVmZXJyZWRUeXBlcztcclxuICBsZXQgZGVmZXJyYWxzID0gZGVmZXJyZWRUeXBlc1tlbnRpdHlUeXBlLm5hbWVdO1xyXG4gIGlmIChkZWZlcnJhbHMpIHtcclxuICAgIGRlZmVycmFscy5mb3JFYWNoKGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgY29tcGxldGVQYXJzZUNzZGxFbnRpdHlUeXBlKGQuZW50aXR5VHlwZSwgZC5jc2RsRW50aXR5VHlwZSwgc2NoZW1hLCBzY2hlbWFzLCBtZXRhZGF0YVN0b3JlKTtcclxuICAgIH0pO1xyXG4gICAgZGVsZXRlIGRlZmVycmVkVHlwZXNbZW50aXR5VHlwZS5uYW1lXTtcclxuICB9XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxDb21wbGV4VHlwZShjc2RsQ29tcGxleFR5cGU6IGFueSwgc2NoZW1hOiBhbnksIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUpIHtcclxuICBsZXQgc2hvcnROYW1lID0gY3NkbENvbXBsZXhUeXBlLm5hbWU7XHJcbiAgbGV0IG5zID0gZ2V0TmFtZXNwYWNlRm9yKHNob3J0TmFtZSwgc2NoZW1hKTtcclxuICBsZXQgY29tcGxleFR5cGUgPSBuZXcgQ29tcGxleFR5cGUoe1xyXG4gICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICBuYW1lc3BhY2U6IG5zXHJcbiAgfSk7XHJcblxyXG4gIGNvcmUudG9BcnJheShjc2RsQ29tcGxleFR5cGUucHJvcGVydHkpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcclxuICAgIHBhcnNlQ3NkbERhdGFQcm9wZXJ0eShjb21wbGV4VHlwZSwgcHJvcCwgc2NoZW1hKTtcclxuICB9KTtcclxuXHJcbiAgbWV0YWRhdGFTdG9yZS5hZGRFbnRpdHlUeXBlKGNvbXBsZXhUeXBlKTtcclxuICByZXR1cm4gY29tcGxleFR5cGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3NkbERhdGFQcm9wZXJ0eShwYXJlbnRUeXBlOiBFbnRpdHlUeXBlIHwgQ29tcGxleFR5cGUsIGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSwga2V5TmFtZXNPblNlcnZlcj86IHN0cmluZ1tdKSB7XHJcbiAgbGV0IGRwOiBEYXRhUHJvcGVydHkgfCB1bmRlZmluZWQ7XHJcbiAgbGV0IHR5cGVQYXJ0cyA9IGNzZGxQcm9wZXJ0eS50eXBlLnNwbGl0KFwiLlwiKTtcclxuICAvLyBCb3RoIHRlc3RzIG9uIHR5cGVQYXJ0cyBhcmUgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgZGlmZmVyaW5nIG1ldGFkYXRhIGNvbnZlbnRpb25zIGZvciBPRGF0YSBhbmQgRWRteCBmZWVkcy5cclxuICBpZiAodHlwZVBhcnRzWzBdLmVuZHNXaXRoKFwiRWRtXCIpICYmIHR5cGVQYXJ0cy5sZW5ndGggPT09IDIpIHtcclxuICAgIGRwID0gcGFyc2VDc2RsU2ltcGxlUHJvcGVydHkocGFyZW50VHlwZSwgY3NkbFByb3BlcnR5LCBrZXlOYW1lc09uU2VydmVyKTtcclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKGlzRW51bVR5cGUoY3NkbFByb3BlcnR5LCBzY2hlbWEpKSB7XHJcbiAgICAgIGRwID0gcGFyc2VDc2RsU2ltcGxlUHJvcGVydHkocGFyZW50VHlwZSwgY3NkbFByb3BlcnR5LCBrZXlOYW1lc09uU2VydmVyKTtcclxuICAgICAgaWYgKGRwKSB7XHJcbiAgICAgICAgZHAuZW51bVR5cGUgPSBjc2RsUHJvcGVydHkudHlwZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZHAgPSBwYXJzZUNzZGxDb21wbGV4UHJvcGVydHkocGFyZW50VHlwZSwgY3NkbFByb3BlcnR5LCBzY2hlbWEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBpZiAoZHApIHtcclxuICAgIHBhcmVudFR5cGUuX2FkZFByb3BlcnR5Q29yZShkcCk7XHJcbiAgICBhZGRWYWxpZGF0b3JzKGRwKTtcclxuICB9XHJcbiAgcmV0dXJuIGRwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxTaW1wbGVQcm9wZXJ0eShwYXJlbnRUeXBlOiBFbnRpdHlUeXBlIHwgQ29tcGxleFR5cGUsIGNzZGxQcm9wZXJ0eTogYW55LCBrZXlOYW1lc09uU2VydmVyPzogc3RyaW5nW10pIHtcclxuICBsZXQgaXNDb2xsZWN0aW9uVHlwZSA9IGlzQ29sbGVjdGlvbihjc2RsUHJvcGVydHkudHlwZSk7XHJcbiAgbGV0IHByb3BlcnR5VHlwZSA9IGdldENvbGxlY3Rpb25UeXBlKGNzZGxQcm9wZXJ0eS50eXBlKSB8fCBjc2RsUHJvcGVydHkudHlwZTtcclxuICBsZXQgZGF0YVR5cGUgPSBEYXRhVHlwZS5mcm9tRWRtRGF0YVR5cGUocHJvcGVydHlUeXBlKTtcclxuICBpZiAoZGF0YVR5cGUgPT0gbnVsbCkge1xyXG4gICAgcGFyZW50VHlwZS53YXJuaW5ncy5wdXNoKFwiVW5hYmxlIHRvIHJlY29nbml6ZSBEYXRhVHlwZSBmb3IgcHJvcGVydHk6IFwiICsgY3NkbFByb3BlcnR5Lm5hbWUgKyBcIiBEYXRlVHlwZTogXCIgKyBjc2RsUHJvcGVydHkudHlwZSk7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBsZXQgaXNOdWxsYWJsZSA9IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PT0gJ3RydWUnIHx8IGNzZGxQcm9wZXJ0eS5udWxsYWJsZSA9PSBudWxsO1xyXG4gIC8vIGxldCBmaXhlZExlbmd0aCA9IGNzZGxQcm9wZXJ0eS5maXhlZExlbmd0aCA/IGNzZGxQcm9wZXJ0eS5maXhlZExlbmd0aCA9PT0gdHJ1ZSA6IHVuZGVmaW5lZDtcclxuICBsZXQgaXNQYXJ0T2ZLZXkgPSBrZXlOYW1lc09uU2VydmVyICE9IG51bGwgJiYga2V5TmFtZXNPblNlcnZlci5pbmRleE9mKGNzZGxQcm9wZXJ0eS5uYW1lKSA+PSAwO1xyXG4gIGlmIChpc1BhcnRPZktleSAmJiBwYXJlbnRUeXBlIGluc3RhbmNlb2YgRW50aXR5VHlwZSAmJiBwYXJlbnRUeXBlLmF1dG9HZW5lcmF0ZWRLZXlUeXBlID09PSBBdXRvR2VuZXJhdGVkS2V5VHlwZS5Ob25lKSB7XHJcbiAgICBpZiAoaXNJZGVudGl0eVByb3BlcnR5KGNzZGxQcm9wZXJ0eSkpIHtcclxuICAgICAgcGFyZW50VHlwZS5hdXRvR2VuZXJhdGVkS2V5VHlwZSA9IEF1dG9HZW5lcmF0ZWRLZXlUeXBlLklkZW50aXR5O1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyBUT0RPOiBuaXQgLSBkb24ndCBzZXQgbWF4TGVuZ3RoIGlmIG51bGw7XHJcbiAgbGV0IG1heExlbmd0aCA9IGNzZGxQcm9wZXJ0eS5tYXhMZW5ndGg7XHJcbiAgbWF4TGVuZ3RoID0gKG1heExlbmd0aCA9PSBudWxsIHx8IG1heExlbmd0aCA9PT0gXCJNYXhcIikgPyBudWxsIDogcGFyc2VJbnQobWF4TGVuZ3RoLCAxMCk7XHJcbiAgLy8gY2FuJ3Qgc2V0IHRoZSBuYW1lIHVudGlsIHdlIGdvIHRocnUgbmFtaW5nQ29udmVudGlvbnMgYW5kIHRoZXNlIG5lZWQgdGhlIGRwLlxyXG5cclxuICBsZXQgZHAgPSBuZXcgRGF0YVByb3BlcnR5KHtcclxuICAgIG5hbWVPblNlcnZlcjogY3NkbFByb3BlcnR5Lm5hbWUsXHJcbiAgICBkYXRhVHlwZTogZGF0YVR5cGUsXHJcbiAgICBpc051bGxhYmxlOiBpc051bGxhYmxlLFxyXG4gICAgaXNQYXJ0T2ZLZXk6IGlzUGFydE9mS2V5LFxyXG4gICAgaXNTY2FsYXI6ICFpc0NvbGxlY3Rpb25UeXBlLFxyXG4gICAgbWF4TGVuZ3RoOiBtYXhMZW5ndGgsXHJcbiAgICBkZWZhdWx0VmFsdWU6IGNzZGxQcm9wZXJ0eS5kZWZhdWx0VmFsdWUsXHJcbiAgICAvLyBmaXhlZExlbmd0aDogZml4ZWRMZW5ndGgsXHJcbiAgICBjb25jdXJyZW5jeU1vZGU6IGNzZGxQcm9wZXJ0eS5jb25jdXJyZW5jeU1vZGVcclxuICB9KTtcclxuXHJcbiAgaWYgKGRhdGFUeXBlID09PSBEYXRhVHlwZS5VbmRlZmluZWQpIHtcclxuICAgIGRwLnJhd1R5cGVOYW1lID0gY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgfVxyXG4gIHJldHVybiBkcDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VDc2RsQ29tcGxleFByb3BlcnR5KHBhcmVudFR5cGU6IEVudGl0eVR5cGUgfCBDb21wbGV4VHlwZSwgY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55KSB7XHJcblxyXG4gIC8vIENvbXBsZXggcHJvcGVydGllcyBhcmUgbmV2ZXIgbnVsbGFibGUgKCBwZXIgRUYgc3BlY3MpXHJcbiAgLy8gbGV0IGlzTnVsbGFibGUgPSBjc2RsUHJvcGVydHkubnVsbGFibGUgPT09ICd0cnVlJyB8fCBjc2RsUHJvcGVydHkubnVsbGFibGUgPT0gbnVsbDtcclxuICAvLyBsZXQgY29tcGxleFR5cGVOYW1lID0gY3NkbFByb3BlcnR5LnR5cGUuc3BsaXQoXCJFZG0uXCIpWzFdO1xyXG4gIGxldCBpc0NvbGxlY3Rpb25UeXBlID0gaXNDb2xsZWN0aW9uKGNzZGxQcm9wZXJ0eS50eXBlKTtcclxuICBsZXQgcHJvcGVydHlUeXBlID0gZ2V0Q29sbGVjdGlvblR5cGUoY3NkbFByb3BlcnR5LnR5cGUpIHx8IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gIGxldCBjb21wbGV4VHlwZU5hbWUgPSBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYShwcm9wZXJ0eVR5cGUsIHNjaGVtYSkudHlwZU5hbWU7XHJcbiAgLy8gY2FuJ3Qgc2V0IHRoZSBuYW1lIHVudGlsIHdlIGdvIHRocnUgbmFtaW5nQ29udmVudGlvbnMgYW5kIHRoZXNlIG5lZWQgdGhlIGRwLlxyXG4gIGxldCBkcCA9IG5ldyBEYXRhUHJvcGVydHkoe1xyXG4gICAgbmFtZU9uU2VydmVyOiBjc2RsUHJvcGVydHkubmFtZSxcclxuICAgIGNvbXBsZXhUeXBlTmFtZTogY29tcGxleFR5cGVOYW1lLFxyXG4gICAgaXNOdWxsYWJsZTogZmFsc2UsXHJcbiAgICBpc1NjYWxhcjogIWlzQ29sbGVjdGlvblR5cGVcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIGRwO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzZGxOYXZQcm9wZXJ0eShlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueVtdKSB7XHJcbiAgbGV0IGFzc29jaWF0aW9uID0gZ2V0QXNzb2NpYXRpb24oY3NkbFByb3BlcnR5LCBzY2hlbWEsIHNjaGVtYXMpO1xyXG4gIGlmICghYXNzb2NpYXRpb24pIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byByZXNvbHZlIEZvcmVpZ24gS2V5IEFzc29jaWF0aW9uOiBcIiArIGNzZGxQcm9wZXJ0eS5yZWxhdGlvbnNoaXApO1xyXG4gIH1cclxuICBsZXQgdG9FbmQgPSBjb3JlLmFycmF5Rmlyc3QoYXNzb2NpYXRpb24uZW5kLCAoYXNzb2NFbmQpID0+IHtcclxuICAgIHJldHVybiBhc3NvY0VuZC5yb2xlID09PSBjc2RsUHJvcGVydHkudG9Sb2xlO1xyXG4gIH0pO1xyXG5cclxuICBsZXQgaXNTY2FsYXIgPSB0b0VuZCEubXVsdGlwbGljaXR5ICE9PSBcIipcIjtcclxuICBsZXQgZGF0YVR5cGUgPSBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYSh0b0VuZCEudHlwZSwgc2NoZW1hKS50eXBlTmFtZTtcclxuXHJcbiAgbGV0IGNvbnN0cmFpbnQgPSBhc3NvY2lhdGlvbi5yZWZlcmVudGlhbENvbnN0cmFpbnQ7XHJcbiAgaWYgKCFjb25zdHJhaW50KSB7XHJcbiAgICAvLyBUT0RPOiBSZXZpc2l0IHRoaXMgbGF0ZXIgLSByaWdodCBub3cgd2UganVzdCBpZ25vcmUgbWFueS1tYW55IGFuZCBhc3NvY3Mgd2l0aCBtaXNzaW5nIGNvbnN0cmFpbnRzLlxyXG5cclxuICAgIC8vIFRoaW5rIGFib3V0IGFkZGluZyB0aGlzIGJhY2sgbGF0ZXIuXHJcbiAgICBpZiAoYXNzb2NpYXRpb24uZW5kWzBdLm11bHRpcGxpY2l0eSA9PT0gXCIqXCIgJiYgYXNzb2NpYXRpb24uZW5kWzFdLm11bHRpcGxpY2l0eSA9PT0gXCIqXCIpIHtcclxuICAgICAgLy8gaWdub3JlIG1hbnkgdG8gbWFueSByZWxhdGlvbnMgZm9yIG5vd1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3Igbm93IGFzc3VtZSBpdCB3aWxsIGJlIHNldCBsYXRlciBkaXJlY3RseSBvbiB0aGUgY2xpZW50LlxyXG4gICAgICAvLyBvdGhlciBhbHRlcm5hdGl2ZSBpcyB0byB0aHJvdyBhbiBlcnJvcjpcclxuICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiRm9yZWlnbiBLZXkgQXNzb2NpYXRpb25zIG11c3QgYmUgdHVybmVkIG9uIGZvciB0aGlzIG1vZGVsXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBsZXQgY2ZnID0ge1xyXG4gICAgbmFtZU9uU2VydmVyOiBjc2RsUHJvcGVydHkubmFtZSxcclxuICAgIGVudGl0eVR5cGVOYW1lOiBkYXRhVHlwZSxcclxuICAgIGlzU2NhbGFyOiBpc1NjYWxhcixcclxuICAgIGFzc29jaWF0aW9uTmFtZTogYXNzb2NpYXRpb24ubmFtZSxcclxuICB9O1xyXG5cclxuICBpZiAoY29uc3RyYWludCkge1xyXG4gICAgbGV0IHByaW5jaXBhbCA9IGNvbnN0cmFpbnQucHJpbmNpcGFsO1xyXG4gICAgbGV0IGRlcGVuZGVudCA9IGNvbnN0cmFpbnQuZGVwZW5kZW50O1xyXG5cclxuICAgIGxldCBwcm9wUmVmcyA9IGNvcmUudG9BcnJheShkZXBlbmRlbnQucHJvcGVydHlSZWYpO1xyXG4gICAgbGV0IGZrTmFtZXMgPSBwcm9wUmVmcy5tYXAoY29yZS5wbHVjayhcIm5hbWVcIikpO1xyXG4gICAgaWYgKGNzZGxQcm9wZXJ0eS5mcm9tUm9sZSA9PT0gcHJpbmNpcGFsLnJvbGUpIHtcclxuICAgICAgKGNmZyBhcyBhbnkpLmludkZvcmVpZ25LZXlOYW1lc09uU2VydmVyID0gZmtOYW1lcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHdpbGwgYmUgdXNlZCBsYXRlciBieSBucC5fdXBkYXRlXHJcbiAgICAgIChjZmcgYXMgYW55KS5mb3JlaWduS2V5TmFtZXNPblNlcnZlciA9IGZrTmFtZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsZXQgbnAgPSBuZXcgTmF2aWdhdGlvblByb3BlcnR5KGNmZyk7XHJcbiAgZW50aXR5VHlwZS5fYWRkUHJvcGVydHlDb3JlKG5wKTtcclxuICByZXR1cm4gbnA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQ29sbGVjdGlvbihwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiBSWF9DT0xMRUNUSU9OLnRlc3QocHJvcGVydHlUeXBlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFbnVtVHlwZShjc2RsUHJvcGVydHk6IGFueSwgc2NoZW1hOiBhbnkpIHtcclxuICBpZiAoc2NoZW1hLmVudW1UeXBlKSByZXR1cm4gaXNFZG14RW51bVR5cGUoY3NkbFByb3BlcnR5LCBzY2hlbWEpO1xyXG4gIGVsc2UgaWYgKHNjaGVtYS5leHRlbnNpb25zKSByZXR1cm4gaXNPRGF0YUVudW1UeXBlKGNzZGxQcm9wZXJ0eSwgc2NoZW1hKTtcclxuICBlbHNlIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFZG14RW51bVR5cGUoY3NkbFByb3BlcnR5OiBhbnksIHNjaGVtYTogYW55KSB7XHJcbiAgbGV0IGVudW1UeXBlcyA9IGNvcmUudG9BcnJheShzY2hlbWEuZW51bVR5cGUpO1xyXG4gIGxldCBwcm9wZXJ0eVR5cGUgPSBnZXRDb2xsZWN0aW9uVHlwZShjc2RsUHJvcGVydHkudHlwZSkgfHwgY3NkbFByb3BlcnR5LnR5cGU7XHJcbiAgbGV0IHR5cGVQYXJ0cyA9IHByb3BlcnR5VHlwZS5zcGxpdChcIi5cIik7XHJcbiAgbGV0IGJhc2VUeXBlTmFtZSA9IHR5cGVQYXJ0c1t0eXBlUGFydHMubGVuZ3RoIC0gMV07XHJcbiAgcmV0dXJuIGVudW1UeXBlcy5zb21lKGZ1bmN0aW9uIChlbnVtVHlwZSkge1xyXG4gICAgcmV0dXJuIGVudW1UeXBlLm5hbWUgPT09IGJhc2VUeXBlTmFtZTtcclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPRGF0YUVudW1UeXBlKGNzZGxQcm9wZXJ0eTogYW55LCBzY2hlbWE6IGFueSkge1xyXG4gIGxldCBlbnVtVHlwZXMgPSBzY2hlbWEuZXh0ZW5zaW9ucy5maWx0ZXIoKGV4dDogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gZXh0Lm5hbWUgPT09IFwiRW51bVR5cGVcIjtcclxuICB9KTtcclxuICBsZXQgcHJvcGVydHlUeXBlID0gZ2V0Q29sbGVjdGlvblR5cGUoY3NkbFByb3BlcnR5LnR5cGUpIHx8IGNzZGxQcm9wZXJ0eS50eXBlO1xyXG4gIGxldCB0eXBlUGFydHMgPSBwcm9wZXJ0eVR5cGUuc3BsaXQoXCIuXCIpO1xyXG4gIGxldCBiYXNlVHlwZU5hbWUgPSB0eXBlUGFydHNbdHlwZVBhcnRzLmxlbmd0aCAtIDFdO1xyXG4gIHJldHVybiBlbnVtVHlwZXMuc29tZSgoZW51bVR5cGU6IGFueSkgPT4ge1xyXG4gICAgcmV0dXJuIGVudW1UeXBlLmF0dHJpYnV0ZXMuc29tZSgoYXR0cjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBhdHRyLm5hbWUgPT09IFwiTmFtZVwiICYmIGF0dHIudmFsdWUgPT09IGJhc2VUeXBlTmFtZTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRWYWxpZGF0b3JzKGRhdGFQcm9wZXJ0eTogRGF0YVByb3BlcnR5KSB7XHJcbiAgbGV0IHR5cGVWYWxpZGF0b3I6IFZhbGlkYXRvcjtcclxuICBpZiAoIWRhdGFQcm9wZXJ0eS5pc051bGxhYmxlKSB7XHJcbiAgICBkYXRhUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5yZXF1aXJlZCgpKTtcclxuICB9XHJcblxyXG4gIGlmIChkYXRhUHJvcGVydHkuaXNDb21wbGV4UHJvcGVydHkpIHJldHVybjtcclxuXHJcbiAgaWYgKGRhdGFQcm9wZXJ0eS5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuU3RyaW5nKSB7XHJcbiAgICBpZiAoZGF0YVByb3BlcnR5Lm1heExlbmd0aCkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yQXJncyA9IHsgbWF4TGVuZ3RoOiBkYXRhUHJvcGVydHkubWF4TGVuZ3RoIH07XHJcbiAgICAgIHR5cGVWYWxpZGF0b3IgPSBWYWxpZGF0b3IubWF4TGVuZ3RoKHZhbGlkYXRvckFyZ3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHlwZVZhbGlkYXRvciA9IFZhbGlkYXRvci5zdHJpbmcoKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yQ3RvciA9IChkYXRhUHJvcGVydHkuZGF0YVR5cGUgYXMgYW55KS52YWxpZGF0b3JDdG9yO1xyXG4gICAgICBpZiAoIXZhbGlkYXRvckN0b3IpIHJldHVybjtcclxuICAgICAgdHlwZVZhbGlkYXRvciA9IHZhbGlkYXRvckN0b3IoKTtcclxuICB9XHJcblxyXG4gIGRhdGFQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2godHlwZVZhbGlkYXRvcik7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0lkZW50aXR5UHJvcGVydHkoY3NkbFByb3BlcnR5OiBhbnkpIHtcclxuICAvLyBzZWUgaWYgd2ViIGFwaSBmZWVkXHJcbiAgbGV0IHByb3BOYW1lID0gY29yZS5hcnJheUZpcnN0KE9iamVjdC5rZXlzKGNzZGxQcm9wZXJ0eSksIChwbikgPT4ge1xyXG4gICAgcmV0dXJuIHBuLmluZGV4T2YoXCJTdG9yZUdlbmVyYXRlZFBhdHRlcm5cIikgPj0gMDtcclxuICB9KTtcclxuICBpZiAocHJvcE5hbWUpIHtcclxuICAgIHJldHVybiAoY3NkbFByb3BlcnR5W3Byb3BOYW1lXSA9PT0gXCJJZGVudGl0eVwiKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gc2VlIGlmIE9kYXRhIGZlZWRcclxuICAgIGxldCBleHRlbnNpb25zID0gY3NkbFByb3BlcnR5LmV4dGVuc2lvbnM7XHJcbiAgICBpZiAoIWV4dGVuc2lvbnMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGlkZW50aXR5RXh0biA9IGNvcmUuYXJyYXlGaXJzdChleHRlbnNpb25zLCAoZXh0ZW5zaW9uKSA9PiB7XHJcbiAgICAgIHJldHVybiBleHRlbnNpb24ubmFtZSA9PT0gXCJTdG9yZUdlbmVyYXRlZFBhdHRlcm5cIiAmJiBleHRlbnNpb24udmFsdWUgPT09IFwiSWRlbnRpdHlcIjtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuICEhaWRlbnRpdHlFeHRuO1xyXG4gIH1cclxufVxyXG5cclxuLy8gRmFzdCB2ZXJzaW9uXHJcbi8vIG5wOiBzY2hlbWEuZW50aXR5VHlwZVtdLm5hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXAgLT4gc2NoZW1hLmFzc29jaWF0aW9uXHJcbi8vICAgbWF0Y2goIHNob3J0TmFtZShucC5yZWxhdGlvbnNoaXApID09IHNjaGVtYS5hc3NvY2lhdGlvbltdLm5hbWVcclxuLy8gICAgICAtLT4gYXNzb2NpYXRpb25fX1xyXG5cclxuLy8gQ29ycmVjdCB2ZXJzaW9uXHJcbi8vIG5wOiBzY2hlbWEuZW50aXR5VHlwZVtdLm5hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXAgLT4gc2NoZW1hLmFzc29jaWF0aW9uXHJcbi8vICAgbWF0Y2goIG5wLnJlbGF0aW9uc2hpcCA9PSBzY2hlbWEuZW50aXR5Q29udGFpbmVyWzBdLmFzc29jaWF0aW9uU2V0W10uYXNzb2NpYXRpb24gKVxyXG4vLyAgICAgIC0+IGFzc29jaWF0aW9uU2V0Lm5hbWVcclxuLy8gICBtYXRjaCAoIGFzc29jaWF0aW9uU2V0Lm5hbWUgPT0gc2NoZW1hLmFzc29jaWF0aW9uW10ubmFtZSApXHJcbi8vICAgICAgLT4gYXNzb2NpYXRpb25cclxuXHJcbmZ1bmN0aW9uIGdldEFzc29jaWF0aW9uKGNzZGxOYXZQcm9wZXJ0eTogYW55LCBjb250YWluaW5nU2NoZW1hOiBhbnksIHNjaGVtYXM6IGFueVtdKSB7XHJcbiAgbGV0IGFzc29jRnVsbE5hbWUgPSBwYXJzZVR5cGVOYW1lV2l0aFNjaGVtYShjc2RsTmF2UHJvcGVydHkucmVsYXRpb25zaGlwLCBjb250YWluaW5nU2NoZW1hKTtcclxuICBsZXQgYXNzb2NOYW1lc3BhY2UgPSBhc3NvY0Z1bGxOYW1lLm5hbWVzcGFjZTtcclxuICBsZXQgYXNzb2NTY2hlbWEgPSBjb3JlLmFycmF5Rmlyc3Qoc2NoZW1hcywgKHNjaGVtYSkgPT4ge1xyXG4gICAgcmV0dXJuIHNjaGVtYS5uYW1lc3BhY2UgPT09IGFzc29jTmFtZXNwYWNlO1xyXG4gIH0pO1xyXG4gIGlmICghYXNzb2NTY2hlbWEpIHJldHVybiBudWxsO1xyXG5cclxuICBsZXQgYXNzb2NOYW1lID0gYXNzb2NGdWxsTmFtZS5zaG9ydFR5cGVOYW1lO1xyXG4gIGxldCBhc3NvY3MgPSBhc3NvY1NjaGVtYS5hc3NvY2lhdGlvbjtcclxuICBpZiAoIWFzc29jcykgcmV0dXJuIG51bGw7XHJcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFzc29jcykpIHtcclxuICAgIGFzc29jcyA9IFthc3NvY3NdO1xyXG4gIH1cclxuICBsZXQgYXNzb2NpYXRpb24gPSBjb3JlLmFycmF5Rmlyc3QoYXNzb2NzLCAoYXNzb2MpID0+IHtcclxuICAgIHJldHVybiBhc3NvYy5uYW1lID09PSBhc3NvY05hbWU7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGFzc29jaWF0aW9uIGFzIElBc3NvY2lhdGlvbjtcclxufVxyXG5cclxuLy8gc2NoZW1hIGlzIG9ubHkgbmVlZGVkIGZvciBuYXZQcm9wZXJ0eSB0eXBlIG5hbWVcclxuZnVuY3Rpb24gcGFyc2VUeXBlTmFtZVdpdGhTY2hlbWEoZW50aXR5VHlwZU5hbWU6IHN0cmluZywgc2NoZW1hOiBhbnkpIHtcclxuICBsZXQgcmVzdWx0ID0gTWV0YWRhdGFTdG9yZS5wYXJzZVR5cGVOYW1lKGVudGl0eVR5cGVOYW1lKTtcclxuICBpZiAoc2NoZW1hICYmIHNjaGVtYS5jU3BhY2VPU3BhY2VNYXBwaW5nKSB7XHJcbiAgICBsZXQgbnMgPSBnZXROYW1lc3BhY2VGb3IocmVzdWx0IS5zaG9ydFR5cGVOYW1lLCBzY2hlbWEpO1xyXG4gICAgaWYgKG5zKSB7XHJcbiAgICAgIHJlc3VsdCA9IE1ldGFkYXRhU3RvcmUubWFrZVR5cGVIYXNoKHJlc3VsdCEuc2hvcnRUeXBlTmFtZSwgbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb2xsZWN0aW9uVHlwZShwcm9wZXJ0eVR5cGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgbWF0Y2ggPSBwcm9wZXJ0eVR5cGUubWF0Y2goUlhfQ09MTEVDVElPTik7XHJcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROYW1lc3BhY2VGb3Ioc2hvcnROYW1lOiBzdHJpbmcsIHNjaGVtYTogYW55KSB7XHJcbiAgbGV0IG5zOiBzdHJpbmc7XHJcbiAgbGV0IG1hcHBpbmcgPSBzY2hlbWEuY1NwYWNlT1NwYWNlTWFwcGluZztcclxuICBpZiAobWFwcGluZykge1xyXG4gICAgbGV0IGZ1bGxOYW1lID0gbWFwcGluZ1tzY2hlbWEubmFtZXNwYWNlICsgXCIuXCIgKyBzaG9ydE5hbWVdO1xyXG4gICAgbnMgPSBmdWxsTmFtZSAmJiBmdWxsTmFtZS5zdWJzdHIoMCwgZnVsbE5hbWUubGVuZ3RoIC0gKHNob3J0TmFtZS5sZW5ndGggKyAxKSk7XHJcbiAgICBpZiAobnMpIHJldHVybiBucztcclxuICB9XHJcbiAgLy8gaWYgc2NoZW1hIGRvZXMgbm90IGFsc28gaGF2ZSBhbiBlbnRpdHlUeXBlIG5vZGUgdGhlblxyXG4gIC8vIHRoaXMgaXMgYW4gV2ViQXBpMiBPRGF0YSBzY2hlbWEgd2hpY2ggaXMgdXN1YWxseSBlcXVhbCB0byAnRGVmYXVsdCc7IHdoaWNoIGlzIHVzZWxlc3MuXHJcbiAgaWYgKHNjaGVtYS5lbnRpdHlUeXBlIHx8IHNjaGVtYS5uYW1lc3BhY2UgIT09ICdEZWZhdWx0Jykge1xyXG4gICAgcmV0dXJuIHNjaGVtYS5uYW1lc3BhY2U7XHJcbiAgfVxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG4vKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuZXhwb3J0IGNvbnN0IENzZGxNZXRhZGF0YVBhcnNlciA9IHtcclxuICBwYXJzZTogcGFyc2VcclxufTtcclxuIl19