@dcl/sdk 7.0.0-2982061039.commit-9cc9ea8 → 7.0.0-3000191624.commit-0ff97dc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ecs7/index.js +4 -4
- package/dist/ecs7/index.min.js +1 -1
- package/dist/ecs7/index.min.js.map +1 -1
- package/package.json +4 -4
- package/types/rpc-modules/CommunicationsController/index.d.ts +14 -0
- package/types/rpc-modules/DevTools/index.d.ts +15 -0
- package/types/rpc-modules/EngineAPI/index.d.ts +160 -0
- package/types/rpc-modules/EnvironmentAPI/index.d.ts +81 -0
- package/types/rpc-modules/EthereumController/index.d.ts +60 -0
- package/types/rpc-modules/ExperimentalAPI/index.d.ts +20 -0
- package/types/rpc-modules/ParcelIdentity/index.d.ts +48 -0
- package/types/rpc-modules/Permissions/index.d.ts +30 -0
- package/types/rpc-modules/Players/index.d.ts +52 -0
- package/types/rpc-modules/PortableExperiences/index.d.ts +38 -0
- package/types/rpc-modules/RestrictedActions/index.d.ts +26 -0
- package/types/rpc-modules/SceneStateStorageController/index.d.ts +90 -0
- package/types/rpc-modules/SignedFetch/index.d.ts +37 -0
- package/types/rpc-modules/SocialController/index.d.ts +18 -0
- package/types/rpc-modules/UserActionModule/index.d.ts +14 -0
- package/types/rpc-modules/UserIdentity/index.d.ts +45 -0
- package/types/tsconfig.ecs7.json +15 -11
- package/types/@decentraland/CommunicationsController/index.d.ts +0 -7
- package/types/@decentraland/EnvironmentAPI/index.d.ts +0 -45
- package/types/@decentraland/EthereumController/index.d.ts +0 -47
- package/types/@decentraland/Identity/index.d.ts +0 -44
- package/types/@decentraland/ParcelIdentity/index.d.ts +0 -49
- package/types/@decentraland/Players/index.d.ts +0 -49
- package/types/@decentraland/PortableExperiences/index.d.ts +0 -39
- package/types/@decentraland/RestrictedActions/index.d.ts +0 -41
- package/types/@decentraland/SignedFetch/index.d.ts +0 -16
- package/types/@decentraland/SocialController/index.d.ts +0 -1
- package/types/@decentraland/web3-provider/index.d.ts +0 -7
package/dist/ecs7/index.js
CHANGED
@@ -9492,7 +9492,7 @@
|
|
9492
9492
|
send(message) {
|
9493
9493
|
// TODO: replace with new rpc
|
9494
9494
|
dcl
|
9495
|
-
.callRpc('
|
9495
|
+
.callRpc('~system/ExperimentalAPI', 'sendToRenderer', [
|
9496
9496
|
{ data: new Uint8Array(message) }
|
9497
9497
|
])
|
9498
9498
|
.catch(dcl.error);
|
@@ -9537,9 +9537,9 @@
|
|
9537
9537
|
transports: [rendererTransport, createNetworkTransport()]
|
9538
9538
|
});
|
9539
9539
|
if (typeof dcl !== 'undefined') {
|
9540
|
-
dcl.loadModule('
|
9540
|
+
dcl.loadModule('~system/ExperimentalAPI', {}).catch(dcl.error);
|
9541
9541
|
async function pullRendererMessages() {
|
9542
|
-
const response = await dcl.callRpc('
|
9542
|
+
const response = await dcl.callRpc('~system/ExperimentalAPI', 'messageFromRenderer', []);
|
9543
9543
|
if (response.data?.length) {
|
9544
9544
|
if (rendererTransport.onmessage) {
|
9545
9545
|
for (const byteArray of response.data) {
|
@@ -9745,4 +9745,4 @@
|
|
9745
9745
|
Object.defineProperty(exports, '__esModule', { value: true });
|
9746
9746
|
|
9747
9747
|
})(this.self = this.self || {});
|
9748
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0FuaW1hdG9yLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BbmltYXRvci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9Tb3VyY2UuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9BdmF0YXJBdHRhY2guZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F2YXRhckF0dGFjaC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL1ZlY3RvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbi50cyIsIi4uL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdmF0YXJTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQmlsbGJvYXJkLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9CaWxsYm9hcmQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0JveFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0NhbWVyYU1vZGVBcmVhLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9HTFRGU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWF0ZXJpYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01hdGVyaWFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9NZXNoQ29sbGlkZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01lc2hDb2xsaWRlci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyVXAuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL09uUG9pbnRlclVwLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJVcFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyVXBSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJMb2NrLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Qb2ludGVyTG9jay5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVWlUZXh0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRleHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2luZGV4Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2xlZ2FjeS9UcmFuc2Zvcm0udHMiLCIuLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyIsIi4uL3NyYy9zY2hlbWFzL0FycmF5LnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvQm9vbGVhbi50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0VudW0udHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9GbG9hdC50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0ludGVnZXIudHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9TdHJpbmcudHMiLCIuLi9zcmMvc2NoZW1hcy9NYXAudHMiLCIuLi9zcmMvc2NoZW1hcy9PcHRpb25hbC50cyIsIi4uL3NyYy9zY2hlbWFzL2luZGV4LnRzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvY3JkdC9kaXN0L3R5cGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvY3JkdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlci9pbmRleC50cyIsIi4uL3NyYy9zZXJpYWxpemF0aW9uL3dpcmVNZXNzYWdlLnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jcmR0L2luZGV4LnRzIiwiLi4vc3JjL2VuZ2luZS9yZWFkb25seS50cyIsIi4uL3NyYy9lbmdpbmUvY29tcG9uZW50LnRzIiwiLi4vc3JjL2VuZ2luZS9lbnRpdHktdXRpbHMudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS50cyIsIi4uL3NyYy9lbmdpbmUvc3lzdGVtcy50cyIsIi4uL3NyYy9lbmdpbmUvaW5kZXgudHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9uZXR3b3JrVHJhbnNwb3J0LnRzIiwiLi4vc3JjL3J1bnRpbWUvaW5pdGlhbGl6YXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jeWNsaWNQYXJlbnRpbmdDaGVja2VyLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2dsb2JhbC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvZ2xvYmFsLm5hbWVzcGFjZS5nZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZlY3RvcjMgPSB2b2lkIDA7XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFZlY3RvcjM7XG4oZnVuY3Rpb24gKFZlY3RvcjMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMuXG4gICAgICogQHBhcmFtIHggLSBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGVzIChvbiBZIGF4aXMpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqL1xuICAgIHggPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKi9cbiAgICB5ID0gMCwgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdGhpcmQgY29vcmRpbmF0ZXMgKG9uIFogYXhpcylcbiAgICAgKi9cbiAgICB6ID0gMCkge1xuICAgICAgICByZXR1cm4geyB4LCB5LCB6IH07XG4gICAgfVxuICAgIFZlY3RvcjMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHBhcmFtIHZlY3RvcjEgLSB0aGUgZmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHZlY3RvcjIgLSB0aGUgc2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkKHZlY3RvcjEsIHZlY3RvcjIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHZlY3RvcjEueCArIHZlY3RvcjIueCxcbiAgICAgICAgICAgIHk6IHZlY3RvcjEueSArIHZlY3RvcjIueSxcbiAgICAgICAgICAgIHo6IHZlY3RvcjEueiArIHZlY3RvcjIuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLmFkZCA9IGFkZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueCxcbiAgICAgICAgICAgIHk6IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueSxcbiAgICAgICAgICAgIHo6IG1pbnVlbmQueiAtIHN1YnRyYWhlbmQuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0cmFjdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdWJ0cmFjdFRvUmVmKG1pbnVlbmQsIHN1YnRyYWhlbmQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBtaW51ZW5kLnkgLSBzdWJ0cmFoZW5kLnk7XG4gICAgICAgIHJlc3VsdC56ID0gbWludWVuZC56IC0gc3VidHJhaGVuZC56O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0VG9SZWYgPSBzdWJ0cmFjdFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIHRoZSBvdGhlciBzaWduXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcHBvc2l0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB4OiAtdmFsdWUueCwgeTogLXZhbHVlLnksIHo6IC12YWx1ZS56IH07XG4gICAgfVxuICAgIFZlY3RvcjMub3Bwb3NpdGUgPSBvcHBvc2l0ZTtcbiAgICAvKipcbiAgICAgKiBDb3B5IHNvdXJjZSBpbnRvIGRlc3RcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHkoc291cmNlLCBkZXN0KSB7XG4gICAgICAgIGRlc3QueCA9IHNvdXJjZS54O1xuICAgICAgICBkZXN0LnkgPSBzb3VyY2UueTtcbiAgICAgICAgZGVzdC56ID0gc291cmNlLno7XG4gICAgfVxuICAgIFZlY3RvcjMuY29weSA9IGNvcHk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIHNhbWUgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5jbG9uZSA9IGNsb25lO1xuICAgIC8vIFByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0bzNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVjdG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56KTtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGggPSBsZW5ndGg7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiB2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLno7XG4gICAgfVxuICAgIFZlY3RvcjMubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgXCJzY2FsZVwiXG4gICAgICogQHBhcmFtIHNjYWxlIC0gZGVmaW5lcyB0aGUgbXVsdGlwbGllciBmYWN0b3JcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2NhbGVUb1JlZih2ZWN0b3IsIHNjYWxlLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSB2ZWN0b3IueCAqIHNjYWxlO1xuICAgICAgICByZXN1bHQueSA9IHZlY3Rvci55ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC56ID0gdmVjdG9yLnogKiBzY2FsZTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZVRvUmVmID0gc2NhbGVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZSh2ZWN0b3IsIHNjYWxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUodmVjdG9yLnggKiBzY2FsZSwgdmVjdG9yLnkgKiBzY2FsZSwgdmVjdG9yLnogKiBzY2FsZSk7XG4gICAgfVxuICAgIFZlY3RvcjMuc2NhbGUgPSBzY2FsZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aCh2ZWN0b3IsIGxlbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCk7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbiwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoID0gbm9ybWFsaXplRnJvbUxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCB8fCBsZW4gPT09IDEuMCkge1xuICAgICAgICAgICAgY29weSh2ZWN0b3IsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVUb1JlZih2ZWN0b3IsIDEuMCAvIGxlbiwgcmVzdWx0KTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYgPSBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWY7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuZ3RoKHZlY3RvcikpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVRvUmVmKHZlY3RvciwgcmVzdWx0KSB7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbmd0aCh2ZWN0b3IpLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZVRvUmVmID0gbm9ybWFsaXplVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgZG90IHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb3QobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcbiAgICB9XG4gICAgVmVjdG9yMy5kb3QgPSBkb3Q7XG4gICAgLyoqXG4gICAgICogUm90YXRlcyBjdXJyZW50IFZlY3RvcjMgYmFzZWQgb24gdGhlIGdpdmVuIHF1YXRlcm5pb24sIGJ1dCBhcHBsaWVzIHRoZSByb3RhdGlvbiB0byB0YXJnZXQgVmVjdG9yMy5cbiAgICAgKiBAcGFyYW0gcSAtIGRlZmluZXMgdGhlIFF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlKHZlY3RvciwgcSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHogfSA9IHZlY3RvcjtcbiAgICAgICAgY29uc3QgeyB4OiBxeCwgeTogcXksIHo6IHF6LCB3OiBxdyB9ID0gcTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gICAgICAgIGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgICAgICAgY29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuICAgICAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5LFxuICAgICAgICAgICAgeTogaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xeixcbiAgICAgICAgICAgIHo6IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5yb3RhdGUgPSByb3RhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yIFwiYW1vdW50XCIgKGZsb2F0KSBvbiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgdmVjdG9ycyBcInN0YXJ0XCIgYW5kIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwID0gbGVycDtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgXCJyZXN1bHRcIiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGZyb20gdGhlIHZlY3RvciBcInN0YXJ0XCIgZm9yIFwiYW1vdW50XCIgdG8gdGhlIHZlY3RvciBcImVuZFwiXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZW5kIC0gZGVmaW5lcyB0aGUgZW5kIHZhbHVlXG4gICAgICogQHBhcmFtIGFtb3VudCAtIG1heCBkZWZpbmVzIGFtb3VudCBiZXR3ZWVuIGJvdGggKGJldHdlZW4gMCBhbmQgMSlcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueSA9IHN0YXJ0LnkgKyAoZW5kLnkgLSBzdGFydC55KSAqIGFtb3VudDtcbiAgICAgICAgcmVzdWx0LnogPSBzdGFydC56ICsgKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQ7XG4gICAgfVxuICAgIFZlY3RvcjMubGVycFRvUmVmID0gbGVycFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0aGUgdmVjdG9ycyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3MobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmVjdG9yMy5aZXJvKCk7XG4gICAgICAgIFZlY3RvcjMuY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zcyA9IGNyb3NzO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC55ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7XG4gICAgICAgIHJlc3VsdC56ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XG4gICAgfVxuICAgIFZlY3RvcjMuY3Jvc3NUb1JlZiA9IGNyb3NzVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmVybygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5aZXJvID0gWmVybztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHVuaXQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIE9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgxLjAsIDEuMCwgMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5PbmUgPSBPbmU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0b2xlbmd0aFNxdWFyZWQgKDAuMCwgMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdXAgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVwKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMS4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlVwID0gVXA7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAtMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gRG93bigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIC0xLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRG93biA9IERvd247XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBmb3J3YXJkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBGb3J3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkZvcndhcmQgPSBGb3J3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAtMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhY2t3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAtMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5CYWNrd2FyZCA9IEJhY2t3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgcmlnaHQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlJpZ2h0ID0gUmlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoLTEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgbGVmdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgtMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuTGVmdCA9IExlZnQ7XG59KShWZWN0b3IzID0gZXhwb3J0cy5WZWN0b3IzIHx8IChleHBvcnRzLlZlY3RvcjMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVjdG9yMy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2NhbGFyID0gdm9pZCAwO1xuLyoqXG4gKiBUd28gcGkgY29uc3RhbnRzIGNvbnZlbmllbnQgZm9yIGNvbXB1dGF0aW9uLlxuICovXG5jb25zdCBUd29QaSA9IE1hdGguUEkgKiAyO1xuLyoqXG4gKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHBhcmFtIGEgLSBudW1iZXJcbiAqIEBwYXJhbSBiIC0gbnVtYmVyXG4gKiBAcGFyYW0gZXBzaWxvbiAtIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICovXG5mdW5jdGlvbiB3aXRoaW5FcHNpbG9uKGEsIGIsIGVwc2lsb24gPSAxLjQwMTI5OGUtNDUpIHtcbiAgICBjb25zdCBudW0gPSBhIC0gYjtcbiAgICByZXR1cm4gLWVwc2lsb24gPD0gbnVtICYmIG51bSA8PSBlcHNpbG9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICogQHBhcmFtIGkgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5zbGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC5cbiAqL1xuZnVuY3Rpb24gdG9IZXgoaSkge1xuICAgIGNvbnN0IHN0ciA9IGkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChpIDw9IDE1KSB7XG4gICAgICAgIHJldHVybiAoJzAnICsgc3RyKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG4vKipcbiAqIFJldHVybnMgLTEgaWYgdmFsdWUgaXMgbmVnYXRpdmUgYW5kICsxIGlzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICogQHBhcmFtIF92YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFsIHRvIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcbiAgICBpZiAoX3ZhbHVlID09PSAwIHx8IGlzTmFOKF92YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF92YWx1ZSA+IDAgPyAxIDogLTE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGJldHdlZW4gbWluIGFuZCBtYXguXG4gKiBSZXR1cm5zIG1pbiBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBtaW4uXG4gKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjbG1hcFxuICogQHBhcmFtIG1pbiAtIHRoZSBtaW4gdmFsdWUgdG8gY2xhbXAgdG8gKGRlZmF1bHQ6IDApXG4gKiBAcGFyYW0gbWF4IC0gdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSlcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpO1xufVxuLyoqXG4gKiB0aGUgbG9nMiBvZiB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2ZcbiAqIEByZXR1cm5zIHRoZSBsb2cyIG9mIHZhbHVlLlxuICovXG5mdW5jdGlvbiBsb2cyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHZhbHVlKSAqIE1hdGguTE9HMkU7XG59XG4vKipcbiAqIExvb3BzIHRoZSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAwLlxuICpcbiAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbW9kdWxvIG9wZXJhdG9yIGJ1dCBpdCB3b3JrcyB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG4gKiBGb3IgZXhhbXBsZSwgdXNpbmcgMy4wIGZvciB0IGFuZCAyLjUgZm9yIGxlbmd0aCwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjUuXG4gKiBXaXRoIHQgPSA1IGFuZCBsZW5ndGggPSAyLjUsIHRoZSByZXN1bHQgd291bGQgYmUgMC4wLlxuICogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgYmVoYXZpb3VyIGlzIG5vdCBkZWZpbmVkIGZvciBuZWdhdGl2ZSBudW1iZXJzIGFzIGl0IGlzIGZvciB0aGUgbW9kdWxvIG9wZXJhdG9yXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWVcbiAqIEBwYXJhbSBsZW5ndGggLSB0aGUgbGVuZ3RoXG4gKiBAcmV0dXJucyB0aGUgbG9vcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gTWF0aC5mbG9vcih2YWx1ZSAvIGxlbmd0aCkgKiBsZW5ndGg7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCB1c2luZyBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHBhcmFtIG1heCAtIG1pbiB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIERlbm9ybWFsaXplIHRoZSB2YWx1ZSBmcm9tIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG5vcm1hbGl6ZWQgLSB2YWx1ZSB0byBkZW5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBkZW5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGVub3JtYWxpemUobm9ybWFsaXplZCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZCAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xlcyBnaXZlbiBpbiBkZWdyZWVzLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IGFuZ2xlIGluIGRlZ3JlZXNcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgYW5nbGUgaW4gZGVncmVlc1xuICogQHJldHVybnMgdGhlIGRlbHRhXG4gKi9cbmZ1bmN0aW9uIGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KSB7XG4gICAgbGV0IG51bSA9IHJlcGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbi8qKlxuICogUGluZ1BvbmdzIHRoZSB2YWx1ZSB0LCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKiBAcGFyYW0gdHggLSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIGxlbmd0aFxuICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIDAgYW5kIGxlbmd0aFxuICovXG5mdW5jdGlvbiBwaW5nUG9uZyh0eCwgbGVuZ3RoKSB7XG4gICAgY29uc3QgdCA9IHJlcGVhdCh0eCwgbGVuZ3RoICogMi4wKTtcbiAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG4vKipcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExlcnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwXG4gKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFuZCBvdGhlciB0cmFuc2l0aW9ucy5cbiAqIEBwYXJhbSBmcm9tIC0gZnJvbVxuICogQHBhcmFtIHRvIC0gdG9cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgc21vb3RoIHN0ZXBwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gc21vb3RoU3RlcChmcm9tLCB0bywgdHgpIHtcbiAgICBsZXQgdCA9IGNsYW1wKHR4KTtcbiAgICB0ID0gLTIuMCAqIHQgKiB0ICogdCArIDMuMCAqIHQgKiB0O1xuICAgIHJldHVybiB0byAqIHQgKyBmcm9tICogKDEuMCAtIHQpO1xufVxuLyoqXG4gKiBNb3ZlcyBhIHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLlxuICogTmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRhcmdldC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKE1hdGguYWJzKHRhcmdldCAtIGN1cnJlbnQpIDw9IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyBzaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTW92ZVRvd2FyZHMgYnV0IG1ha2VzIHN1cmUgdGhlIHZhbHVlcyBpbnRlcnBvbGF0ZSBjb3JyZWN0bHkgd2hlbiB0aGV5IHdyYXAgYXJvdW5kIDM2MCBkZWdyZWVzLlxuICpcbiAqIFZhcmlhYmxlcyBjdXJyZW50IGFuZCB0YXJnZXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gZGVncmVlcy4gRm9yIG9wdGltaXphdGlvbiByZWFzb25zLCBuZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGFcbiAqICBhcmUgbm90IHN1cHBvcnRlZCBhbmQgbWF5IGNhdXNlIG9zY2lsbGF0aW9uLiBUbyBwdXNoIGN1cnJlbnQgYXdheSBmcm9tIGEgdGFyZ2V0IGFuZ2xlLCBhZGQgMTgwIHRvIHRoYXQgYW5nbGUgaW5zdGVhZC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyBhbmdsZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkc0FuZ2xlKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBjb25zdCBudW0gPSBkZWx0YUFuZ2xlKGN1cnJlbnQsIHRhcmdldCk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhEZWx0YSkge1xuICAgICAgICByZXN1bHQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBtb3ZlVG93YXJkcyhjdXJyZW50LCBjdXJyZW50ICsgbnVtLCBtYXhEZWx0YSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NhbGFyIHdpdGggdmFsdWVzIGxpbmVhcmx5IGludGVycG9sYXRlZCBvZiBcImFtb3VudFwiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXJcbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gZW5kIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gYW1vdW50IHRvIGxlcnAgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGxlcnBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBhbW91bnQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTGVycCBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKiBUaGUgcGFyYW1ldGVyIHQgaXMgY2xhbXBlZCB0byB0aGUgcmFuZ2UgWzAsIDFdLiBWYXJpYWJsZXMgYSBhbmQgYiBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnBBbmdsZShzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgbnVtICogY2xhbXAoYW1vdW50KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGluZWFyIHBhcmFtZXRlciB0IHRoYXQgcHJvZHVjZXMgdGhlIGludGVycG9sYW50IHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UgW2EsIGJdLlxuICogQHBhcmFtIGEgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGIgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIGJldHdlZW4gYSBhbmQgYlxuICogQHJldHVybnMgdGhlIGludmVyc2VMZXJwIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGludmVyc2VMZXJwKGEsIGIsIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgcmVzdWx0ID0gY2xhbXAoKHZhbHVlIC0gYSkgLyAoYiAtIGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IDAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBzY2FsYXIgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBIZXJtaXRlIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBzY2FsYXJzIFwidmFsdWUxXCIsIFwidmFsdWUzXCIsIFwidGFuZ2VudDFcIiwgXCJ0YW5nZW50MlwiLlxuICoge0BsaW5rIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vSGVybWl0ZVBvbHlub21pYWwuaHRtbH1cbiAqIEBwYXJhbSB2YWx1ZTEgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB0YW5nZW50MSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHZhbHVlMiAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gaW5wdXQgdmFsdWVcbiAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGhlcm1pdGUodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50MiwgYW1vdW50KSB7XG4gICAgY29uc3Qgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDtcbiAgICBjb25zdCBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDEgPSAyLjAgKiBjdWJlZCAtIDMuMCAqIHNxdWFyZWQgKyAxLjA7XG4gICAgY29uc3QgcGFydDIgPSAtMi4wICogY3ViZWQgKyAzLjAgKiBzcXVhcmVkO1xuICAgIGNvbnN0IHBhcnQzID0gY3ViZWQgLSAyLjAgKiBzcXVhcmVkICsgYW1vdW50O1xuICAgIGNvbnN0IHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkO1xuICAgIHJldHVybiB2YWx1ZTEgKiBwYXJ0MSArIHZhbHVlMiAqIHBhcnQyICsgdGFuZ2VudDEgKiBwYXJ0MyArIHRhbmdlbnQyICogcGFydDQ7XG59XG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJldHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZSBvZiByYW5kb21cbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWUgb2YgcmFuZG9tXG4gKiBAcmV0dXJucyByYW5kb20gdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmFuZ2UobWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUpXG4gKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKVxuICogQHBhcmFtIG51bSAtIHRvIGNvbnZlcnQgdG8gcGVyY2VudGFnZVxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIHBlcmNlbnRhZ2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1BlcmNlbnQobnVtLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobnVtIC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBlcmNlbnRhZ2UgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBQZXJjZW50VG9SYW5nZSgwLjM0LDAsMTAwKSB3aWxsIHJldHVybiAzNC5cbiAqIEBwYXJhbSBwZXJjZW50IC0gdG8gY29udmVydCB0byBudW1iZXJcbiAqIEBwYXJhbSBtaW4gLSBtaW4gcmFuZ2VcbiAqIEBwYXJhbSBtYXggLSBtYXggcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gcGVyY2VudFRvUmFuZ2UocGVyY2VudCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKG1heCAtIG1pbikgKiBwZXJjZW50ICsgbWluO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbmdsZSBjb252ZXJ0ZWQgdG8gZXF1aXZhbGVudCB2YWx1ZSBiZXR3ZWVuIC1NYXRoLlBJIGFuZCBNYXRoLlBJIHJhZGlhbnMuXG4gKiBAcGFyYW0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplIGluIHJhZGlhbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgYW5nbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhZGlhbnMoYW5nbGUpIHtcbiAgICAvLyBNb3JlIHByZWNpc2UgYnV0IHNsb3dlciB2ZXJzaW9uIGtlcHQgZm9yIHJlZmVyZW5jZS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb21tZW50ZWQtb3V0LWNvZGVcbiAgICAvKlxuICAgICAgLy8gYW5nbGUgPSBhbmdsZSAlIFRvb2xzLlR3b1BpO1xuICAgICAgLy8gYW5nbGUgPSAoYW5nbGUgKyBUb29scy5Ud29QaSkgJSBUb29scy5Ud29QaTtcbiAgXG4gICAgICAvL2lmIChhbmdsZSA+IE1hdGguUEkpIHtcbiAgICAgIC8vXHRhbmdsZSAtPSBUb29scy5Ud29QaTtcbiAgICAgIC8vfVxuICAgICAgICAqL1xuICAgIHJldHVybiBhbmdsZSAtIFR3b1BpICogTWF0aC5mbG9vcigoYW5nbGUgKyBNYXRoLlBJKSAvIFR3b1BpKTtcbn1cbi8qKlxuICogU2NhbGFyIGNvbXB1dGF0aW9uIGxpYnJhcnlcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5TY2FsYXIgPSB7XG4gICAgd2l0aGluRXBzaWxvbixcbiAgICB0b0hleCxcbiAgICBzaWduLFxuICAgIGNsYW1wLFxuICAgIGxvZzIsXG4gICAgcmVwZWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICBkZW5vcm1hbGl6ZSxcbiAgICBkZWx0YUFuZ2xlLFxuICAgIHBpbmdQb25nLFxuICAgIHNtb290aFN0ZXAsXG4gICAgbW92ZVRvd2FyZHMsXG4gICAgbW92ZVRvd2FyZHNBbmdsZSxcbiAgICBsZXJwLFxuICAgIGxlcnBBbmdsZSxcbiAgICBpbnZlcnNlTGVycCxcbiAgICBoZXJtaXRlLFxuICAgIHJhbmRvbVJhbmdlLFxuICAgIHJhbmdlVG9QZXJjZW50LFxuICAgIHBlcmNlbnRUb1JhbmdlLFxuICAgIG5vcm1hbGl6ZVJhZGlhbnMsXG4gICAgVHdvUGlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2FsYXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJBRDJERUcgPSBleHBvcnRzLkRFRzJSQUQgPSBleHBvcnRzLkVwc2lsb24gPSBleHBvcnRzLlRvTGluZWFyU3BhY2UgPSBleHBvcnRzLlRvR2FtbWFTcGFjZSA9IGV4cG9ydHMuU3BhY2UgPSBleHBvcnRzLk9yaWVudGF0aW9uID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZpbmVzIHBvdGVudGlhbCBvcmllbnRhdGlvbiBmb3IgYmFjayBmYWNlIGN1bGxpbmdcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE9yaWVudGF0aW9uO1xuKGZ1bmN0aW9uIChPcmllbnRhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENsb2Nrd2lzZVxuICAgICAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ1dcIl0gPSAwXSA9IFwiQ1dcIjtcbiAgICAvKiogQ291bnRlciBjbG9ja3dpc2UgKi9cbiAgICBPcmllbnRhdGlvbltPcmllbnRhdGlvbltcIkNDV1wiXSA9IDFdID0gXCJDQ1dcIjtcbn0pKE9yaWVudGF0aW9uID0gZXhwb3J0cy5PcmllbnRhdGlvbiB8fCAoZXhwb3J0cy5PcmllbnRhdGlvbiA9IHt9KSk7XG4vKipcbiAqIERlZmluZXMgc3VwcG9ydGVkIHNwYWNlc1xuICogQHB1YmxpY1xuICovXG52YXIgU3BhY2U7XG4oZnVuY3Rpb24gKFNwYWNlKSB7XG4gICAgLyoqIExvY2FsIChvYmplY3QpIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJMT0NBTFwiXSA9IDBdID0gXCJMT0NBTFwiO1xuICAgIC8qKiBXb3JsZCBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiV09STERcIl0gPSAxXSA9IFwiV09STERcIjtcbiAgICAvKiogQm9uZSBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiQk9ORVwiXSA9IDJdID0gXCJCT05FXCI7XG59KShTcGFjZSA9IGV4cG9ydHMuU3BhY2UgfHwgKGV4cG9ydHMuU3BhY2UgPSB7fSkpO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvR2FtbWFTcGFjZSA9IDEgLyAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGxpbmVhciBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvTGluZWFyU3BhY2UgPSAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gZGVmaW5lIHRoZSBtaW5pbWFsIG51bWJlciB2YWx1ZSBpbiBCYWJ5bG9uLmpzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuRXBzaWxvbiA9IDAuMDAwMDAxO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSBFdWxlciBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5ERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGZyb20gcmFkaWFucyB0byBFdWxlciBkZWdyZWVzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuUkFEMkRFRyA9IDM2MCAvIChNYXRoLlBJICogMik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVhdGVybmlvbiA9IHZvaWQgMDtcbmNvbnN0IFZlY3RvcjNfMSA9IHJlcXVpcmUoXCIuL1ZlY3RvcjNcIik7XG5jb25zdCBTY2FsYXJfMSA9IHJlcXVpcmUoXCIuL1NjYWxhclwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgUXVhdGVybmlvbjtcbihmdW5jdGlvbiAoUXVhdGVybmlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBmbG9hdHNcbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB6IC0gZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHcgLSBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoXG4gICAgLyoqIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHggPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeSA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHRoaXJkIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHogPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkgKi9cbiAgICB3ID0gMS4wKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHosIHcgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBRdWF0ZXJuaW9uIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gcXVhdGVybmlvbnMuXG4gICAgICogQHBhcmFtIHExIC0gdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcTIgLSB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQocTEsIHEyKSB7XG4gICAgICAgIHJldHVybiB7IHg6IHExLnggKyBxMi54LCB5OiBxMS55ICsgcTIueSwgejogcTEueiArIHEyLnosIHc6IHExLncgKyBxMi53IH07XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXVsZXIgZmxvYXQgYW5nbGVzICh5LCB4LCB6KSBhbmQgc3RvcmVzIGl0IGluIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB5YXcgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzXG4gICAgICogQHBhcmFtIHBpdGNoIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpc1xuICAgICAqIEBwYXJhbSByb2xsIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFogYXhpc1xuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHlhdywgcGl0Y2gsIHJvbGwpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMywgczIgKiBjMSAqIGMzIC0gYzIgKiBzMSAqIHMzLCBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzMsIGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRpb25ZYXdQaXRjaFJvbGwgPSByb3RhdGlvbllhd1BpdGNoUm9sbDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcm90YXRpb24gdGhhdCByb3RhdGVzIHogZGVncmVlcyBhcm91bmQgdGhlIHogYXhpcywgeCBkZWdyZWVzIGFyb3VuZCB0aGUgeCBheGlzLCBhbmQgeSBkZWdyZWVzIGFyb3VuZCB0aGUgeSBheGlzLlxuICAgICAqIEBwYXJhbSB4IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB4IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB5IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB5IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB6IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB6IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyKHgsIHksIHopIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHkgKiB0eXBlc18xLkRFRzJSQUQsIHggKiB0eXBlc18xLkRFRzJSQUQsIHogKiB0eXBlc18xLkRFRzJSQUQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyID0gZXVsZXI7XG4gICAgLyoqXG4gICAgICogR2V0cyBsZW5ndGggb2YgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHF1YXRlcm5pb24gbGVuZ3RoIChmbG9hdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgocSkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGxlbmd0aFNxdWFyZWQocSkpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQocSkge1xuICAgICAgICByZXR1cm4gcS54ICogcS54ICsgcS55ICogcS55ICsgcS56ICogcS56ICsgcS53ICogcS53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aFNxdWFyZWQgPSBsZW5ndGhTcXVhcmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IChmbG9hdCkgYmV0d2VlbiB0aGUgcXVhdGVybmlvbnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gKGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0LncpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBpbiBkZWdyZWVzIGJldHdlZW4gdHdvIHJvdGF0aW9ucyBhIGFuZCBiLlxuICAgICAqIEBwYXJhbSBxdWF0MSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcXVhdDIgLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFuZ2xlKHF1YXQxLCBxdWF0Mikge1xuICAgICAgICBjb25zdCBkb3RWYWwgPSBkb3QocXVhdDEsIHF1YXQyKTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLmFicyhkb3RWYWwpLCAxKSkgKiAyICogdHlwZXNfMS5SQUQyREVHO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlID0gYW5nbGU7XG4gICAgLyoqXG4gICAgICogVGhlIGZyb20gcXVhdGVybmlvbiBpcyByb3RhdGVkIHRvd2FyZHMgdG8gYnkgYW4gYW5ndWxhciBzdGVwIG9mIG1heERlZ3JlZXNEZWx0YS5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBtYXhEZWdyZWVzRGVsdGEgLSB0aGUgaW50ZXJ2YWwgc3RlcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0ZVRvd2FyZHMoZnJvbSwgdG8sIG1heERlZ3JlZXNEZWx0YSkge1xuICAgICAgICBjb25zdCBudW0gPSBhbmdsZShmcm9tLCB0byk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgbWF4RGVncmVlc0RlbHRhIC8gbnVtKTtcbiAgICAgICAgcmV0dXJuIHNsZXJwKGZyb20sIHRvLCB0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGVUb3dhcmRzID0gcm90YXRlVG93YXJkcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGZvcndhcmQgYW5kIHVwd2FyZHMgZGlyZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gZm9yd2FyZCAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpblxuICAgICAqIEBwYXJhbSB1cCAtIHRoZSB2ZWN0b3IgdGhhdCBkZWZpbmVzIGluIHdoaWNoIGRpcmVjdGlvbiB1cCBpc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvb2tSb3RhdGlvbihmb3J3YXJkLCB1cCA9IHsgeDogMC4wLCB5OiAxLjAsIHo6IDAuMCB9KSB7XG4gICAgICAgIGNvbnN0IGZvcndhcmROZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHVwLCBmb3J3YXJkTmV3KSk7XG4gICAgICAgIGNvbnN0IHVwTmV3ID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3MoZm9yd2FyZE5ldywgcmlnaHQpO1xuICAgICAgICBjb25zdCBtMDAgPSByaWdodC54O1xuICAgICAgICBjb25zdCBtMDEgPSByaWdodC55O1xuICAgICAgICBjb25zdCBtMDIgPSByaWdodC56O1xuICAgICAgICBjb25zdCBtMTAgPSB1cE5ldy54O1xuICAgICAgICBjb25zdCBtMTEgPSB1cE5ldy55O1xuICAgICAgICBjb25zdCBtMTIgPSB1cE5ldy56O1xuICAgICAgICBjb25zdCBtMjAgPSBmb3J3YXJkTmV3Lng7XG4gICAgICAgIGNvbnN0IG0yMSA9IGZvcndhcmROZXcueTtcbiAgICAgICAgY29uc3QgbTIyID0gZm9yd2FyZE5ldy56O1xuICAgICAgICBjb25zdCBudW04ID0gbTAwICsgbTExICsgbTIyO1xuICAgICAgICBjb25zdCBxdWF0ZXJuaW9uID0gY3JlYXRlKCk7XG4gICAgICAgIGlmIChudW04ID4gMCkge1xuICAgICAgICAgICAgbGV0IG51bSA9IE1hdGguc3FydChudW04ICsgMSk7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSBudW0gKiAwLjU7XG4gICAgICAgICAgICBudW0gPSAwLjUgLyBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEyIC0gbTIxKSAqIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjAgLSBtMDIpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMSAtIG0xMCkgKiBudW07XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTAwID49IG0xMSAmJiBtMDAgPj0gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW03ID0gTWF0aC5zcXJ0KDEgKyBtMDAgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtNCA9IDAuNSAvIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAwLjUgKiBudW03O1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0wMSArIG0xMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMiArIG0yMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0xMiAtIG0yMSkgKiBudW00O1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0xMSA+IG0yMikge1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IE1hdGguc3FydCgxICsgbTExIC0gbTAwIC0gbTIyKTtcbiAgICAgICAgICAgIGNvbnN0IG51bTMgPSAwLjUgLyBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gKG0xMCArIG0wMSkgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gMC41ICogbnVtNjtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMjEgKyBtMTIpICogbnVtMztcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IChtMjAgLSBtMDIpICogbnVtMztcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bTUgPSBNYXRoLnNxcnQoMSArIG0yMiAtIG0wMCAtIG0xMSk7XG4gICAgICAgIGNvbnN0IG51bTIgPSAwLjUgLyBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTIwICsgbTAyKSAqIG51bTI7XG4gICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjEgKyBtMTIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi56ID0gMC41ICogbnVtNTtcbiAgICAgICAgcXVhdGVybmlvbi53ID0gKG0wMSAtIG0xMCkgKiBudW0yO1xuICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sb29rUm90YXRpb24gPSBsb29rUm90YXRpb247XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGluIHBsYWNlIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUocSkge1xuICAgICAgICBjb25zdCBxTGVuZ3RoID0gMS4wIC8gbGVuZ3RoKHEpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKHEueCAqIHFMZW5ndGgsIHEueSAqIHFMZW5ndGgsIHEueiAqIHFMZW5ndGgsIHEudyAqIHFMZW5ndGgpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2hpY2ggcm90YXRlcyBmcm9tIGZyb21EaXJlY3Rpb24gdG8gdG9EaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGZyb20gLSBkZWZpbmVzIHRoZSBmaXJzdCBkaXJlY3Rpb24gVmVjdG9yXG4gICAgICogQHBhcmFtIHRvIC0gZGVmaW5lcyB0aGUgdGFyZ2V0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tVG9Sb3RhdGlvbihmcm9tLCB0bywgdXAgPSBWZWN0b3IzXzEuVmVjdG9yMy5VcCgpKSB7XG4gICAgICAgIC8vIFVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBpbXBsZW1lbnRlZCBmcm9tIGh0dHBzOi8vZm9ydW0udW5pdHkuY29tL3RocmVhZHMvcXVhdGVybmlvbi1sb29rcm90YXRpb24tYXJvdW5kLWFuLWF4aXMuNjA4NDcwLyNwb3N0LTQwNjk4ODhcbiAgICAgICAgY29uc3QgdjAgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZnJvbSk7XG4gICAgICAgIGNvbnN0IHYxID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKHRvKTtcbiAgICAgICAgY29uc3QgYSA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHYwLCB2MSk7XG4gICAgICAgIGNvbnN0IHcgPSBNYXRoLnNxcnQoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZCh2MCkgKiBWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYxKSkgK1xuICAgICAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuZG90KHYwLCB2MSk7XG4gICAgICAgIGlmIChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKGEpIDwgMC4wMDAxKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmVjdG9ycyBhcmUgcGFyYWxsZWwsIGNoZWNrIHcgdG8gZmluZCBkaXJlY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIHcgaXMgMCB0aGVuIHZhbHVlcyBhcmUgb3Bwb3NpdGUsIGFuZCB3ZSBzb3VsZCByb3RhdGUgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBzdXBwbGllZCBheGlzXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHZlY3RvcnMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFuZCBubyByb3RhdGlvbiBzaG91bGQgb2NjdXJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh3KSA8IDAuMDAwMVxuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplKGNyZWF0ZSh1cC54LCB1cC55LCB1cC56LCAwKSlcbiAgICAgICAgICAgICAgICA6IElkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGNyZWF0ZShhLngsIGEueSwgYS56LCB3KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tVG9Sb3RhdGlvbiA9IGZyb21Ub1JvdGF0aW9uO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIC0gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLklkZW50aXR5ID0gSWRlbnRpdHk7XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBldWxlciBhbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcm90YXRpb24uXG4gICAgICogSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyQW5nbGVzKHEpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gVmVjdG9yM18xLlZlY3RvcjMuY3JlYXRlKCk7XG4gICAgICAgIC8vIGlmIHRoZSBpbnB1dCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgaXMgZXhhY3RseSBvbmUuIE90aGVyd2lzZSwgdGhpcyBhY3RzIGFzIGEgY29ycmVjdGlvbiBmYWN0b3IgZm9yIHRoZSBxdWF0ZXJuaW9uJ3Mgbm90LW5vcm1hbGl6ZWRuZXNzXG4gICAgICAgIGNvbnN0IHVuaXQgPSBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgICAgIC8vIHEgd2lsbCBoYXZlIGEgbWFnbml0dWRlIG9mIDAuNSBvciBncmVhdGVyIGlmIGFuZCBvbmx5IGlmIHEgaXMgYSBzaW5ndWxhcml0eSBjYXNlXG4gICAgICAgIGNvbnN0IHRlc3QgPSBxLnggKiBxLncgLSBxLnkgKiBxLno7XG4gICAgICAgIGlmICh0ZXN0ID4gMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgbm9ydGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSBNYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gMiAqIE1hdGguYXRhbjIocS55LCBxLngpO1xuICAgICAgICAgICAgb3V0LnogPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRlc3QgPCAtMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgc291dGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSAtTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICBvdXQueSA9IC0yICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBzaW5ndWxhcml0eSAtIHEgaXMgdGhlIG1ham9yaXR5IG9mIGNhc2VzXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguYXNpbigyICogKHEudyAqIHEueCAtIHEueSAqIHEueikpO1xuICAgICAgICAgICAgb3V0LnkgPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnkgKyAyICogcS56ICogcS54LCAxIC0gMiAqIChxLnggKiBxLnggKyBxLnkgKiBxLnkpKTtcbiAgICAgICAgICAgIG91dC56ID0gTWF0aC5hdGFuMigyICogcS53ICogcS56ICsgMiAqIHEueCAqIHEueSwgMSAtIDIgKiAocS56ICogcS56ICsgcS54ICogcS54KSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0LnggKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICBvdXQueSAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC56ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBkZWdyZWUgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDM2MFxuICAgICAgICBvdXQueCA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LngsIDM2MCk7XG4gICAgICAgIG91dC55ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueSwgMzYwKTtcbiAgICAgICAgb3V0LnogPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC56LCAzNjApO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyQW5nbGVzID0gZXVsZXJBbmdsZXM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXN1bHQueCA9IGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMztcbiAgICAgICAgcmVzdWx0LnkgPSBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczM7XG4gICAgICAgIHJlc3VsdC56ID0gYzIgKiBjMSAqIHMzIC0gczIgKiBzMSAqIGMzO1xuICAgICAgICByZXN1bHQudyA9IGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmID0gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZjtcbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0gbWF0cml4IC0gZGVmaW5lcyB0aGUgc291cmNlIG1hdHJpeFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdHJpeCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXRyaXguX207XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgY29uc3QgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTtcbiAgICAgICAgY29uc3QgbTIxID0gZGF0YVsxXSwgbTIyID0gZGF0YVs1XSwgbTIzID0gZGF0YVs5XTtcbiAgICAgICAgY29uc3QgbTMxID0gZGF0YVsyXSwgbTMyID0gZGF0YVs2XSwgbTMzID0gZGF0YVsxMF07XG4gICAgICAgIC8vIHRzbGludDplbmFibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCB0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcbiAgICAgICAgbGV0IHM7XG4gICAgICAgIGlmICh0cmFjZSA+IDApIHtcbiAgICAgICAgICAgIHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAwLjI1IC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0zMiAtIG0yMykgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEzIC0gbTMxKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjEgLSBtMTIpICogcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtMTEgPiBtMjIgJiYgbTExID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMzIgLSBtMjMpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0xMyArIG0zMSkgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0yMiA+IG0zMykge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMTEgLSBtMzMpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTEzIC0gbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMSAtIG0xMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gMC4yNSAqIHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmO1xuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2VcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnAobGVmdCwgcmlnaHQsIGFtb3VudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnNsZXJwID0gc2xlcnA7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zIGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsZXJwVG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIGxldCBudW0yO1xuICAgICAgICBsZXQgbnVtMztcbiAgICAgICAgbGV0IG51bTQgPSBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAobnVtNCA8IDApIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgbnVtNCA9IC1udW00O1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHtcbiAgICAgICAgICAgIG51bTMgPSAxIC0gYW1vdW50O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguYWNvcyhudW00KTtcbiAgICAgICAgICAgIGNvbnN0IG51bTYgPSAxLjAgLyBNYXRoLnNpbihudW01KTtcbiAgICAgICAgICAgIG51bTMgPSBNYXRoLnNpbigoMS4wIC0gYW1vdW50KSAqIG51bTUpICogbnVtNjtcbiAgICAgICAgICAgIG51bTIgPSBmbGFnXG4gICAgICAgICAgICAgICAgPyAtTWF0aC5zaW4oYW1vdW50ICogbnVtNSkgKiBudW02XG4gICAgICAgICAgICAgICAgOiBNYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTY7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnggPSBudW0zICogbGVmdC54ICsgbnVtMiAqIHJpZ2h0Lng7XG4gICAgICAgIHJlc3VsdC55ID0gbnVtMyAqIGxlZnQueSArIG51bTIgKiByaWdodC55O1xuICAgICAgICByZXN1bHQueiA9IG51bTMgKiBsZWZ0LnogKyBudW0yICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LncgPSBudW0zICogbGVmdC53ICsgbnVtMiAqIHJpZ2h0Lnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZiA9IHNsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcXVhdGVybmlvbnNcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseShzZWxmLCBxMSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCwgMS4wKTtcbiAgICAgICAgbXVsdGlwbHlUb1JlZihzZWxmLCBxMSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIFwicmVzdWx0XCIgYXMgdGhlIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzZWxmLnggKiBxMS53ICsgc2VsZi55ICogcTEueiAtIHNlbGYueiAqIHExLnkgKyBzZWxmLncgKiBxMS54O1xuICAgICAgICByZXN1bHQueSA9IC1zZWxmLnggKiBxMS56ICsgc2VsZi55ICogcTEudyArIHNlbGYueiAqIHExLnggKyBzZWxmLncgKiBxMS55O1xuICAgICAgICByZXN1bHQueiA9IHNlbGYueCAqIHExLnkgLSBzZWxmLnkgKiBxMS54ICsgc2VsZi56ICogcTEudyArIHNlbGYudyAqIHExLno7XG4gICAgICAgIHJlc3VsdC53ID0gLXNlbGYueCAqIHExLnggLSBzZWxmLnkgKiBxMS55IC0gc2VsZi56ICogcTEueiArIHNlbGYudyAqIHExLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZiA9IG11bHRpcGx5VG9SZWY7XG4gICAgZnVuY3Rpb24gYW5nbGVBeGlzKGRlZ3Jlc3MsIGF4aXMpIHtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYXhpcykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSWRlbnRpdHkoKTtcbiAgICAgICAgbGV0IHJhZGlhbnMgPSBkZWdyZXNzICogdHlwZXNfMS5ERUcyUkFEO1xuICAgICAgICByYWRpYW5zICo9IDAuNTtcbiAgICAgICAgY29uc3QgYTIgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoYXhpcyk7XG4gICAgICAgIFZlY3RvcjNfMS5WZWN0b3IzLnNjYWxlVG9SZWYoYTIsIE1hdGguc2luKHJhZGlhbnMpLCBhMik7XG4gICAgICAgIHJlc3VsdC54ID0gYTIueDtcbiAgICAgICAgcmVzdWx0LnkgPSBhMi55O1xuICAgICAgICByZXN1bHQueiA9IGEyLno7XG4gICAgICAgIHJlc3VsdC53ID0gTWF0aC5jb3MocmFkaWFucyk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUocmVzdWx0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hbmdsZUF4aXMgPSBhbmdsZUF4aXM7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHplcm8gZmlsbGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uWmVybyA9IFplcm87XG59KShRdWF0ZXJuaW9uID0gZXhwb3J0cy5RdWF0ZXJuaW9uIHx8IChleHBvcnRzLlF1YXRlcm5pb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVhdGVybmlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1F1YXRlcm5pb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1ZlY3RvcjNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbmRleFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBhc1Byb21pc2U7XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5hc1Byb21pc2V9LlxyXG4gKiBAdHlwZWRlZiBhc1Byb21pc2VDYWxsYmFja1xyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBBZGRpdGlvbmFsIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSBmcm9tIGEgbm9kZS1zdHlsZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHthc1Byb21pc2VDYWxsYmFja30gZm4gRnVuY3Rpb24gdG8gY2FsbFxyXG4gKiBAcGFyYW0geyp9IGN0eCBGdW5jdGlvbiBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEZ1bmN0aW9uIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTwqPn0gUHJvbWlzaWZpZWQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGFzUHJvbWlzZShmbiwgY3R4LyosIHZhcmFyZ3MgKi8pIHtcclxuICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICBvZmZzZXQgID0gMCxcclxuICAgICAgICBpbmRleCAgID0gMixcclxuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcclxuICAgIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpXHJcbiAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0XSA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVyci8qLCB2YXJhcmdzICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlLmFwcGx5KG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgYmFzZTY0IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgYmFzZTY0ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBieXRlIGxlbmd0aCBvZiBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbmJhc2U2NC5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgcCA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICBpZiAoIXApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB2YXIgbiA9IDA7XHJcbiAgICB3aGlsZSAoLS1wICUgNCA+IDEgJiYgc3RyaW5nLmNoYXJBdChwKSA9PT0gXCI9XCIpXHJcbiAgICAgICAgKytuO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbChzdHJpbmcubGVuZ3RoICogMykgLyA0IC0gbjtcclxufTtcclxuXHJcbi8vIEJhc2U2NCBlbmNvZGluZyB0YWJsZVxyXG52YXIgYjY0ID0gbmV3IEFycmF5KDY0KTtcclxuXHJcbi8vIEJhc2U2NCBkZWNvZGluZyB0YWJsZVxyXG52YXIgczY0ID0gbmV3IEFycmF5KDEyMyk7XHJcblxyXG4vLyA2NS4uOTAsIDk3Li4xMjIsIDQ4Li41NywgNDMsIDQ3XHJcbmZvciAodmFyIGkgPSAwOyBpIDwgNjQ7KVxyXG4gICAgczY0W2I2NFtpXSA9IGkgPCAyNiA/IGkgKyA2NSA6IGkgPCA1MiA/IGkgKyA3MSA6IGkgPCA2MiA/IGkgLSA0IDogaSAtIDU5IHwgNDNdID0gaSsrO1xyXG5cclxuLyoqXHJcbiAqIEVuY29kZXMgYSBidWZmZXIgdG8gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IGVuY29kZWQgc3RyaW5nXHJcbiAqL1xyXG5iYXNlNjQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdO1xyXG4gICAgdmFyIGkgPSAwLCAvLyBvdXRwdXQgaW5kZXhcclxuICAgICAgICBqID0gMCwgLy8gZ290byBpbmRleFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHZhciBiID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W2IgPj4gMl07XHJcbiAgICAgICAgICAgICAgICB0ID0gKGIgJiAzKSA8PCA0O1xyXG4gICAgICAgICAgICAgICAgaiA9IDE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA0XTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDE1KSA8PCAyO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA2XTtcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiAmIDYzXTtcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaikge1xyXG4gICAgICAgIGNodW5rW2krK10gPSBiNjRbdF07XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IDYxO1xyXG4gICAgICAgIGlmIChqID09PSAxKVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxudmFyIGludmFsaWRFbmNvZGluZyA9IFwiaW52YWxpZCBlbmNvZGluZ1wiO1xyXG5cclxuLyoqXHJcbiAqIERlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gYSBidWZmZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW5cclxuICogQHRocm93cyB7RXJyb3J9IElmIGVuY29kaW5nIGlzIGludmFsaWRcclxuICovXHJcbmJhc2U2NC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0O1xyXG4gICAgdmFyIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoYyA9PT0gNjEgJiYgaiA+IDEpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGlmICgoYyA9IHM2NFtjXSkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gdCA8PCAyIHwgKGMgJiA0OCkgPj4gNDtcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9ICh0ICYgMTUpIDw8IDQgfCAoYyAmIDYwKSA+PiAyO1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAzKSA8PCA2IHwgYztcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBhcHBlYXJzIHRvIGJlIGJhc2U2NCBlbmNvZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byB0ZXN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcHJvYmFibHkgYmFzZTY0IGVuY29kZWQsIG90aGVyd2lzZSBmYWxzZVxyXG4gKi9cclxuYmFzZTY0LnRlc3QgPSBmdW5jdGlvbiB0ZXN0KHN0cmluZykge1xyXG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHN0cmluZyk7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UuXHJcbiAqIEBjbGFzc2Rlc2MgQSBtaW5pbWFsIGV2ZW50IGVtaXR0ZXIuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsKj59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIExpc3RlbmVyXHJcbiAqIEBwYXJhbSB7Kn0gW2N0eF0gTGlzdGVuZXIgY29udGV4dFxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2dCwgZm4sIGN0eCkge1xyXG4gICAgKHRoaXMuX2xpc3RlbmVyc1tldnRdIHx8ICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdKSkucHVzaCh7XHJcbiAgICAgICAgZm4gIDogZm4sXHJcbiAgICAgICAgY3R4IDogY3R4IHx8IHRoaXNcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBvciBhbnkgbWF0Y2hpbmcgbGlzdGVuZXJzIGlmIGFyZ3VtZW50cyBhcmUgb21pdHRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtldnRdIEV2ZW50IG5hbWUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBpZiBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIExpc3RlbmVyIHRvIHJlbW92ZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIG9mIGBldnRgIGlmIG9taXR0ZWQuXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZihldnQsIGZuKSB7XHJcbiAgICBpZiAoZXZ0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXS5mbiA9PT0gZm4pXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICArK2k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdHMgYW4gZXZlbnQgYnkgY2FsbGluZyBpdHMgbGlzdGVuZXJzIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2dCkge1xyXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgaWYgKGxpc3RlbmVycykge1xyXG4gICAgICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2krK10uY3R4LCBhcmdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmYWN0b3J5KTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyAvIHdyaXRlcyBmbG9hdHMgLyBkb3VibGVzIGZyb20gLyB0byBidWZmZXJzLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0XHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLy8gRmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm9kZS1iYXNlZCB0ZXN0aW5nIGluIG1vZGlmaWVkIGdsb2JhbCBlbnZpcm9ubWVudHNcclxuZnVuY3Rpb24gZmFjdG9yeShleHBvcnRzKSB7XHJcblxyXG4gICAgLy8gZmxvYXQ6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShbIC0wIF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmMzIuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzNdID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9jcHkgOiB3cml0ZUZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfcmV2IDogd3JpdGVGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfY3B5IDogcmVhZEZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gbGUgPyByZWFkRmxvYXRfZjMyX3JldiA6IHJlYWRGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgIC8vIGZsb2F0OiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9pZWVlNzU0KHdyaXRlVWludCwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc05hTih2YWwpKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDMyODkzNDQsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMy40MDI4MjM0NjYzODUyODg2ZSszOCkgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgMS4xNzU0OTQzNTA4MjIyODc1ZS0zOCkgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IE1hdGgucm91bmQodmFsIC8gMS40MDEyOTg0NjQzMjQ4MTdlLTQ1KSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBNYXRoLnJvdW5kKHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCkgKiA4Mzg4NjA4KSAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEyNyA8PCAyMyB8IG1hbnRpc3NhKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFKTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2llZWU3NTQocmVhZFVpbnQsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciB1aW50ID0gcmVhZFVpbnQoYnVmLCBwb3MpLFxyXG4gICAgICAgICAgICAgICAgc2lnbiA9ICh1aW50ID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSB1aW50ID4+PiAyMyAmIDI1NSxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdWludCAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjU1XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE1MCkgKiAobWFudGlzc2EgKyA4Mzg4NjA4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUpO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgLy8gZG91YmxlOiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGY2NC5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbN10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbN107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbN107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfY3B5IDogd3JpdGVEb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X3JldiA6IHdyaXRlRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSBsZSA/IHJlYWREb3VibGVfZjY0X2NweSA6IHJlYWREb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9yZXYgOiByZWFkRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgLy8gZG91YmxlOiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfaWVlZTc1NCh3cml0ZVVpbnQsIG9mZjAsIG9mZjEsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDY5NTkzNjAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpIHsgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTQ2NDM1MDcyKSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYW50aXNzYTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgeyAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsIC8gNWUtMzI0O1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBtYW50aXNzYSAvIDQyOTQ5NjcyOTYpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09PSAxMDI0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDEwMjM7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSAqIDQ1MDM1OTk2MjczNzA0OTYgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMDIzIDw8IDIwIHwgbWFudGlzc2EgKiAxMDQ4NTc2ICYgMTA0ODU3NSkgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9pZWVlNzU0KHJlYWRVaW50LCBvZmYwLCBvZmYxLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgbG8gPSByZWFkVWludChidWYsIHBvcyArIG9mZjApLFxyXG4gICAgICAgICAgICAgICAgaGkgPSByZWFkVWludChidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IChoaSA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gaGkgPj4+IDIwICYgMjA0NyxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gNDI5NDk2NzI5NiAqIChoaSAmIDEwNDg1NzUpICsgbG87XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjA0N1xyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiA1ZS0zMjQgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxMDc1KSAqIChtYW50aXNzYSArIDQ1MDM1OTk2MjczNzA0OTYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbn1cclxuXHJcbi8vIHVpbnQgaGVscGVyc1xyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50TEUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludEJFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgPj4+IDI0O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludExFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXVxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdIDw8IDI0KSA+Pj4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRCRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF0gPDwgMjRcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSkgPj4+IDA7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gaW5xdWlyZTtcclxuXHJcbi8qKlxyXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSBvbmx5IGlmIGF2YWlsYWJsZS5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWUgTW9kdWxlIHRvIHJlcXVpcmVcclxuICogQHJldHVybnMgez9PYmplY3R9IFJlcXVpcmVkIG1vZHVsZSBpZiBhdmFpbGFibGUgYW5kIG5vdCBlbXB0eSwgb3RoZXJ3aXNlIGBudWxsYFxyXG4gKi9cclxuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBtb2QgPSBldmFsKFwicXVpcmVcIi5yZXBsYWNlKC9eLyxcInJlXCIpKShtb2R1bGVOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXHJcbiAgICAgICAgaWYgKG1vZCAmJiAobW9kLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhtb2QpLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgVVRGOCBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIGFycmF5cy5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxudmFyIHV0ZjggPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFVURjggYnl0ZSBsZW5ndGggb2YgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGUgbGVuZ3RoXHJcbiAqL1xyXG51dGY4Lmxlbmd0aCA9IGZ1bmN0aW9uIHV0ZjhfbGVuZ3RoKHN0cmluZykge1xyXG4gICAgdmFyIGxlbiA9IDAsXHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXHJcbiAgICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIGVsc2UgaWYgKChjICYgMHhGQzAwKSA9PT0gMHhEODAwICYmIChzdHJpbmcuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBsZW4gKz0gNDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgbGVuICs9IDM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHJlYWRcclxuICovXHJcbnV0ZjgucmVhZCA9IGZ1bmN0aW9uIHV0ZjhfcmVhZChidWZmZXIsIHN0YXJ0LCBlbmQpIHtcclxuICAgIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdLFxyXG4gICAgICAgIGkgPSAwLCAvLyBjaGFyIG9mZnNldFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHQgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgaWYgKHQgPCAxMjgpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSB0O1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBlbHNlIGlmICh0ID4gMjM5ICYmIHQgPCAzNjUpIHtcclxuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzKSAtIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweERDMDAgKyAodCAmIDEwMjMpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBpZiAoaSA+IDgxOTEpIHtcclxuICAgICAgICAgICAgKHBhcnRzIHx8IChwYXJ0cyA9IFtdKSkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmspKTtcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgaWYgKGkpXHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSBzdHJpbmcgYXMgVVRGOCBieXRlcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlcyB3cml0dGVuXHJcbiAqL1xyXG51dGY4LndyaXRlID0gZnVuY3Rpb24gdXRmOF93cml0ZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQsXHJcbiAgICAgICAgYzEsIC8vIGNoYXJhY3RlciAxXHJcbiAgICAgICAgYzI7IC8vIGNoYXJhY3RlciAyXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMxID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMxIDwgMTI4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGMxIDwgMjA0OCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgICAgICB8IDE5MjtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoYzEgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKChjMiA9IHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgYzEgPSAweDEwMDAwICsgKChjMSAmIDB4MDNGRikgPDwgMTApICsgKGMyICYgMHgwM0ZGKTtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTggICAgICB8IDI0MDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgICAgICB8IDIyNDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gcG9vbDtcclxuXHJcbi8qKlxyXG4gKiBBbiBhbGxvY2F0b3IgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbEFsbG9jYXRvclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcclxuICovXHJcblxyXG4vKipcclxuICogQSBzbGljZXIgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbFNsaWNlclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmQgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXIgc2xpY2VcclxuICogQHRoaXMge1VpbnQ4QXJyYXl9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlciBwb29sLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtQb29sQWxsb2NhdG9yfSBhbGxvYyBBbGxvY2F0b3JcclxuICogQHBhcmFtIHtQb29sU2xpY2VyfSBzbGljZSBTbGljZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTgxOTJdIFNsYWIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7UG9vbEFsbG9jYXRvcn0gUG9vbGVkIGFsbG9jYXRvclxyXG4gKi9cclxuZnVuY3Rpb24gcG9vbChhbGxvYywgc2xpY2UsIHNpemUpIHtcclxuICAgIHZhciBTSVpFICAgPSBzaXplIHx8IDgxOTI7XHJcbiAgICB2YXIgTUFYICAgID0gU0laRSA+Pj4gMTtcclxuICAgIHZhciBzbGFiICAgPSBudWxsO1xyXG4gICAgdmFyIG9mZnNldCA9IFNJWkU7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9vbF9hbGxvYyhzaXplKSB7XHJcbiAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiBNQVgpXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvYyhzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IFNJWkUpIHtcclxuICAgICAgICAgICAgc2xhYiA9IGFsbG9jKFNJWkUpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnVmID0gc2xpY2UuY2FsbChzbGFiLCBvZmZzZXQsIG9mZnNldCArPSBzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICYgNykgLy8gYWxpZ24gdG8gMzIgYml0XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgfCA3KSArIDE7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZjtcclxuICAgIH07XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IExvbmdCaXRzO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzLlxuICogQGNsYXNzZGVzYyBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWUuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbG8gTG93IDMyIGJpdHMsIHVuc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gaGkgSGlnaCAzMiBiaXRzLCB1bnNpZ25lZFxuICovXG5mdW5jdGlvbiBMb25nQml0cyhsbywgaGkpIHtcblxuICAgIC8vIG5vdGUgdGhhdCB0aGUgY2FzdHMgYmVsb3cgYXJlIHRoZW9yZXRpY2FsbHkgdW5uZWNlc3NhcnkgYXMgb2YgdG9kYXksIGJ1dCBvbGRlciBzdGF0aWNhbGx5XG4gICAgLy8gZ2VuZXJhdGVkIGNvbnZlcnRlciBjb2RlIG1pZ2h0IHN0aWxsIGNhbGwgdGhlIGN0b3Igd2l0aCBzaWduZWQgMzJiaXRzLiBrZXB0IGZvciBjb21wYXQuXG5cbiAgICAvKipcbiAgICAgKiBMb3cgYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubG8gPSBsbyA+Pj4gMDtcblxuICAgIC8qKlxuICAgICAqIEhpZ2ggYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGkgPSBoaSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBaZXJvIGJpdHMuXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3V0aWwuTG9uZ0JpdHN9XG4gKi9cbnZhciB6ZXJvID0gTG9uZ0JpdHMuemVybyA9IG5ldyBMb25nQml0cygwLCAwKTtcblxuemVyby50b051bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbnplcm8uenpFbmNvZGUgPSB6ZXJvLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9O1xuemVyby5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH07XG5cbi8qKlxuICogWmVybyBoYXNoLlxuICogQG1lbWJlcm9mIHV0aWwuTG9uZ0JpdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbnZhciB6ZXJvSGFzaCA9IExvbmdCaXRzLnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIG51bWJlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb21OdW1iZXIgPSBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gemVybztcbiAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMDtcbiAgICBpZiAoc2lnbilcbiAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgdmFyIGxvID0gdmFsdWUgPj4+IDAsXG4gICAgICAgIGhpID0gKHZhbHVlIC0gbG8pIC8gNDI5NDk2NzI5NiA+Pj4gMDtcbiAgICBpZiAoc2lnbikge1xuICAgICAgICBoaSA9IH5oaSA+Pj4gMDtcbiAgICAgICAgbG8gPSB+bG8gPj4+IDA7XG4gICAgICAgIGlmICgrK2xvID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKCsraGkgPiA0Mjk0OTY3Mjk1KVxuICAgICAgICAgICAgICAgIGhpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKGxvLCBoaSk7XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIGEgbnVtYmVyLCBsb25nIG9yIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIodmFsdWUpO1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICAgICAgdmFsdWUgPSB1dGlsLkxvbmcuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBMb25nQml0cy5mcm9tTnVtYmVyKHBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubG93IHx8IHZhbHVlLmhpZ2ggPyBuZXcgTG9uZ0JpdHModmFsdWUubG93ID4+PiAwLCB2YWx1ZS5oaWdoID4+PiAwKSA6IHplcm87XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgcG9zc2libHkgdW5zYWZlIEphdmFTY3JpcHQgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBQb3NzaWJseSB1bnNhZmUgbnVtYmVyXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKHVuc2lnbmVkKSB7XG4gICAgaWYgKCF1bnNpZ25lZCAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgICB2YXIgbG8gPSB+dGhpcy5sbyArIDEgPj4+IDAsXG4gICAgICAgICAgICBoaSA9IH50aGlzLmhpICAgICA+Pj4gMDtcbiAgICAgICAgaWYgKCFsbylcbiAgICAgICAgICAgIGhpID0gaGkgKyAxID4+PiAwO1xuICAgICAgICByZXR1cm4gLShsbyArIGhpICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgbG9uZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd9IExvbmdcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uIHRvTG9uZyh1bnNpZ25lZCkge1xuICAgIHJldHVybiB1dGlsLkxvbmdcbiAgICAgICAgPyBuZXcgdXRpbC5Mb25nKHRoaXMubG8gfCAwLCB0aGlzLmhpIHwgMCwgQm9vbGVhbih1bnNpZ25lZCkpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogeyBsb3c6IHRoaXMubG8gfCAwLCBoaWdoOiB0aGlzLmhpIHwgMCwgdW5zaWduZWQ6IEJvb2xlYW4odW5zaWduZWQpIH07XG59O1xuXG52YXIgY2hhckNvZGVBdCA9IFN0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdDtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIDggY2hhcmFjdGVycyBsb25nIGhhc2guXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gQml0c1xuICovXG5Mb25nQml0cy5mcm9tSGFzaCA9IGZ1bmN0aW9uIGZyb21IYXNoKGhhc2gpIHtcbiAgICBpZiAoaGFzaCA9PT0gemVyb0hhc2gpXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMoXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDApXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDEpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMykgPDwgMjQpID4+PiAwXG4gICAgLFxuICAgICAgICAoIGNoYXJDb2RlQXQuY2FsbChoYXNoLCA0KVxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA1KSA8PCA4XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDYpIDw8IDE2XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDcpIDw8IDI0KSA+Pj4gMFxuICAgICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvSGFzaCA9IGZ1bmN0aW9uIHRvSGFzaCgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgdGhpcy5sbyAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gMjQgICAgICAsXG4gICAgICAgIHRoaXMuaGkgICAgICAgICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiA4ICAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMTYgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDI0XG4gICAgKTtcbn07XG5cbi8qKlxuICogWmlnLXphZyBlbmNvZGVzIHRoaXMgbG9uZyBiaXRzLlxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IGB0aGlzYFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUuenpFbmNvZGUgPSBmdW5jdGlvbiB6ekVuY29kZSgpIHtcbiAgICB2YXIgbWFzayA9ICAgdGhpcy5oaSA+PiAzMTtcbiAgICB0aGlzLmhpICA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5sbyAgPSAoIHRoaXMubG8gPDwgMSAgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGRlY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekRlY29kZSA9IGZ1bmN0aW9uIHp6RGVjb2RlKCkge1xuICAgIHZhciBtYXNrID0gLSh0aGlzLmxvICYgMSk7XG4gICAgdGhpcy5sbyAgPSAoKHRoaXMubG8gPj4+IDEgfCB0aGlzLmhpIDw8IDMxKSBeIG1hc2spID4+PiAwO1xuICAgIHRoaXMuaGkgID0gKCB0aGlzLmhpID4+PiAxICAgICAgICAgICAgICAgICAgXiBtYXNrKSA+Pj4gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgbG9uZ2JpdHMgd2hlbiBlbmNvZGVkIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge251bWJlcn0gTGVuZ3RoXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoKSB7XG4gICAgdmFyIHBhcnQwID0gIHRoaXMubG8sXG4gICAgICAgIHBhcnQxID0gKHRoaXMubG8gPj4+IDI4IHwgdGhpcy5oaSA8PCA0KSA+Pj4gMCxcbiAgICAgICAgcGFydDIgPSAgdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHBhcnQyID09PSAwXG4gICAgICAgICA/IHBhcnQxID09PSAwXG4gICAgICAgICAgID8gcGFydDAgPCAxNjM4NFxuICAgICAgICAgICAgID8gcGFydDAgPCAxMjggPyAxIDogMlxuICAgICAgICAgICAgIDogcGFydDAgPCAyMDk3MTUyID8gMyA6IDRcbiAgICAgICAgICAgOiBwYXJ0MSA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MSA8IDEyOCA/IDUgOiA2XG4gICAgICAgICAgICAgOiBwYXJ0MSA8IDIwOTcxNTIgPyA3IDogOFxuICAgICAgICAgOiBwYXJ0MiA8IDEyOCA/IDkgOiAxMDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciB1dGlsID0gZXhwb3J0cztcblxuLy8gdXNlZCB0byByZXR1cm4gYSBQcm9taXNlIHdoZXJlIGNhbGxiYWNrIGlzIG9taXR0ZWRcbnV0aWwuYXNQcm9taXNlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2FzcHJvbWlzZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwuYmFzZTY0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Jhc2U2NFwiKTtcblxuLy8gYmFzZSBjbGFzcyBvZiBycGMuU2VydmljZVxudXRpbC5FdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZXZlbnRlbWl0dGVyXCIpO1xuXG4vLyBmbG9hdCBoYW5kbGluZyBhY2Nyb3NzIGJyb3dzZXJzXG51dGlsLmZsb2F0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Zsb2F0XCIpO1xuXG4vLyByZXF1aXJlcyBtb2R1bGVzIG9wdGlvbmFsbHkgYW5kIGhpZGVzIHRoZSBjYWxsIGZyb20gYnVuZGxlcnNcbnV0aWwuaW5xdWlyZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9pbnF1aXJlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gdXRmOCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwudXRmOCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy91dGY4XCIpO1xuXG4vLyBwcm92aWRlcyBhIG5vZGUtbGlrZSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlclxudXRpbC5wb29sID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3Bvb2xcIik7XG5cbi8vIHV0aWxpdHkgdG8gd29yayB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZVxudXRpbC5Mb25nQml0cyA9IHJlcXVpcmUoXCIuL2xvbmdiaXRzXCIpO1xuXG4vKipcbiAqIFdoZXRoZXIgcnVubmluZyB3aXRoaW4gbm9kZSBvciBub3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbnV0aWwuaXNOb2RlID0gQm9vbGVhbih0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9uc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG4vKipcbiAqIEdsb2JhbCBvYmplY3QgcmVmZXJlbmNlLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbnV0aWwuZ2xvYmFsID0gdXRpbC5pc05vZGUgJiYgZ2xvYmFsXG4gICAgICAgICAgIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG4gICAgICAgICAgIHx8IHR5cGVvZiBzZWxmICAgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuICAgICAgICAgICB8fCB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG4vKipcbiAqIEFuIGltbXVhYmxlIGVtcHR5IGFycmF5LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtBcnJheS48Kj59XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoW10pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW107IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIEFuIGltbXV0YWJsZSBlbXB0eSBvYmplY3QuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7fTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xudXRpbC5pc0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmdcbiAqL1xudXRpbC5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqL1xudXRpbC5pc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIHV0aWwuaXNTZXR9LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc3NldCA9XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzU2V0ID0gZnVuY3Rpb24gaXNTZXQob2JqLCBwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW3Byb3BdO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXEsIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmxlbmd0aCA6IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpID4gMDtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBCdWZmZXIgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IG5vZGUncyB0eXBpbmdzLlxuICogQGludGVyZmFjZSBCdWZmZXJcbiAqIEBleHRlbmRzIFVpbnQ4QXJyYXlcbiAqL1xuXG4vKipcbiAqIE5vZGUncyBCdWZmZXIgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPEJ1ZmZlcj59XG4gKi9cbnV0aWwuQnVmZmVyID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBCdWZmZXIgPSB1dGlsLmlucXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuICAgICAgICAvLyByZWZ1c2UgdG8gdXNlIG5vbi1ub2RlIGJ1ZmZlcnMgaWYgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQgKHBlcmYgcmVhc29ucyk6XG4gICAgICAgIHJldHVybiBCdWZmZXIucHJvdG90eXBlLnV0ZjhXcml0ZSA/IEJ1ZmZlciA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59KSgpO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZnVsbCBmb3IgQnVmZmVyLmZyb20uXG51dGlsLl9CdWZmZXJfZnJvbSA9IG51bGw7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmaWxsIGZvciBCdWZmZXIuYWxsb2NVbnNhZmUuXG51dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIG9mIHdoYXRldmVyIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbc2l6ZU9yQXJyYXk9MF0gQnVmZmVyIHNpemUgb3IgbnVtYmVyIGFycmF5XG4gKiBAcmV0dXJucyB7VWludDhBcnJheXxCdWZmZXJ9IEJ1ZmZlclxuICovXG51dGlsLm5ld0J1ZmZlciA9IGZ1bmN0aW9uIG5ld0J1ZmZlcihzaXplT3JBcnJheSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHR5cGVvZiBzaXplT3JBcnJheSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogbmV3IHV0aWwuQXJyYXkoc2l6ZU9yQXJyYXkpXG4gICAgICAgIDogdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2Zyb20oc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IHR5cGVvZiBVaW50OEFycmF5ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBzaXplT3JBcnJheVxuICAgICAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoc2l6ZU9yQXJyYXkpO1xufTtcblxuLyoqXG4gKiBBcnJheSBpbXBsZW1lbnRhdGlvbiB1c2VkIGluIHRoZSBicm93c2VyLiBgVWludDhBcnJheWAgaWYgc3VwcG9ydGVkLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxVaW50OEFycmF5Pn1cbiAqL1xudXRpbC5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiID8gVWludDhBcnJheSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA6IEFycmF5O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIExvbmcgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgTG9uZyBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbG9uZy5qcy5cbiAqIEBpbnRlcmZhY2UgTG9uZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvdyBMb3cgYml0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGhpZ2ggSGlnaCBiaXRzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKi9cblxuLyoqXG4gKiBMb25nLmpzJ3MgTG9uZyBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8TG9uZz59XG4gKi9cbnV0aWwuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8gJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTy5Mb25nXG4gICAgICAgICB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5Mb25nXG4gICAgICAgICB8fCB1dGlsLmlucXVpcmUoXCJsb25nXCIpO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAyIGJpdCAoYGJvb2xgKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDMyIGJpdCAoYGludDMyYCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkzMlJlID0gL14tPyg/OjB8WzEtOV1bMC05XSopJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDY0IGJpdCAoYGludDY0YCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXk2NFJlID0gL14oPzpbXFxcXHgwMC1cXFxceGZmXXs4fXwtPyg/OjB8WzEtOV1bMC05XSopKSQvO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIG9yIGxvbmcgdG8gYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIYXNoXG4gKi9cbnV0aWwubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uIGxvbmdUb0hhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyB1dGlsLkxvbmdCaXRzLmZyb20odmFsdWUpLnRvSGFzaCgpXG4gICAgICAgIDogdXRpbC5Mb25nQml0cy56ZXJvSGFzaDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcgdG8gYSBsb25nIG9yIG51bWJlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd8bnVtYmVyfSBPcmlnaW5hbCB2YWx1ZVxuICovXG51dGlsLmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uIGxvbmdGcm9tSGFzaChoYXNoLCB1bnNpZ25lZCkge1xuICAgIHZhciBiaXRzID0gdXRpbC5Mb25nQml0cy5mcm9tSGFzaChoYXNoKTtcbiAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICByZXR1cm4gdXRpbC5Mb25nLmZyb21CaXRzKGJpdHMubG8sIGJpdHMuaGksIHVuc2lnbmVkKTtcbiAgICByZXR1cm4gYml0cy50b051bWJlcihCb29sZWFuKHVuc2lnbmVkKSk7XG59O1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgc291cmNlIG9iamVjdCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gZHN0IERlc3RpbmF0aW9uIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gc3JjIFNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lmTm90U2V0PWZhbHNlXSBNZXJnZXMgb25seSBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHNldFxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBEZXN0aW5hdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIGlmTm90U2V0KSB7IC8vIHVzZWQgYnkgY29udmVydGVyc1xuICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChkc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCB8fCAhaWZOb3RTZXQpXG4gICAgICAgICAgICBkc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgcmV0dXJuIGRzdDtcbn1cblxudXRpbC5tZXJnZSA9IG1lcmdlO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbnZlcnRlZCBzdHJpbmdcbiAqL1xudXRpbC5sY0ZpcnN0ID0gZnVuY3Rpb24gbGNGaXJzdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBlcnJvciBjb25zdHJ1Y3Rvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFcnJvciBuYW1lXG4gKiBAcmV0dXJucyB7Q29uc3RydWN0b3I8RXJyb3I+fSBDdXN0b20gZXJyb3IgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gbmV3RXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcykge1xuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDdXN0b21FcnJvcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgICAgIC8vIF4ganVzdCByZXR1cm5zIGEgbmV3IGVycm9yIGluc3RhbmNlIGJlY2F1c2UgdGhlIGN0b3IgY2FuIGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWVzc2FnZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtZXNzYWdlOyB9IH0pO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgLy8gbm9kZVxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3VzdG9tRXJyb3IpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFja1wiLCB7IHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayB8fCBcIlwiIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgbWVyZ2UodGhpcywgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgKEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21FcnJvci5wcm90b3R5cGUsIFwibmFtZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBuYW1lOyB9IH0pO1xuXG4gICAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcblxuICAgIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxudXRpbC5uZXdFcnJvciA9IG5ld0Vycm9yO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcHJvdG9jb2wgZXJyb3IuXG4gKiBAY2xhc3NkZXNjIEVycm9yIHN1YmNsYXNzIGluZGljYXRpbmcgYSBwcm90b2NvbCBzcGVjaWZjIGVycm9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBleHRlbmRzIEVycm9yXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW3Byb3BlcnRpZXNdIEFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogQGV4YW1wbGVcbiAqIHRyeSB7XG4gKiAgICAgTXlNZXNzYWdlLmRlY29kZShzb21lQnVmZmVyKTsgLy8gdGhyb3dzIGlmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICogfSBjYXRjaCAoZSkge1xuICogICAgIGlmIChlIGluc3RhbmNlb2YgUHJvdG9jb2xFcnJvciAmJiBlLmluc3RhbmNlKVxuICogICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgc28gZmFyOiBcIiArIEpTT04uc3RyaW5naWZ5KGUuaW5zdGFuY2UpKTtcbiAqIH1cbiAqL1xudXRpbC5Qcm90b2NvbEVycm9yID0gbmV3RXJyb3IoXCJQcm90b2NvbEVycm9yXCIpO1xuXG4vKipcbiAqIFNvIGZhciBkZWNvZGVkIG1lc3NhZ2UgaW5zdGFuY2UuXG4gKiBAbmFtZSB1dGlsLlByb3RvY29sRXJyb3IjaW5zdGFuY2VcbiAqIEB0eXBlIHtNZXNzYWdlPFQ+fVxuICovXG5cbi8qKlxuICogQSBPbmVPZiBnZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZHZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZHZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBnZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZHZXR0ZXJ9IFVuYm91bmQgZ2V0dGVyXG4gKi9cbnV0aWwub25lT2ZHZXR0ZXIgPSBmdW5jdGlvbiBnZXRPbmVPZihmaWVsZE5hbWVzKSB7XG4gICAgdmFyIGZpZWxkTWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICBmaWVsZE1hcFtmaWVsZE5hbWVzW2ldXSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID4gLTE7IC0taSlcbiAgICAgICAgICAgIGlmIChmaWVsZE1hcFtrZXlzW2ldXSA9PT0gMSAmJiB0aGlzW2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgdGhpc1trZXlzW2ldXSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5c1tpXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBIE9uZU9mIHNldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZlNldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZlNldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZSBGaWVsZCBuYW1lXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgc2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mU2V0dGVyfSBVbmJvdW5kIHNldHRlclxuICovXG51dGlsLm9uZU9mU2V0dGVyID0gZnVuY3Rpb24gc2V0T25lT2YoZmllbGROYW1lcykge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmllbGQgbmFtZVxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVzW2ldICE9PSBuYW1lKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2ZpZWxkTmFtZXNbaV1dO1xuICAgIH07XG59O1xuXG4vKipcbiAqIERlZmF1bHQgY29udmVyc2lvbiBvcHRpb25zIHVzZWQgZm9yIHtAbGluayBNZXNzYWdlI3RvSlNPTn0gaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoZXNlIG9wdGlvbnMgYXJlIGNsb3NlIHRvIHByb3RvMydzIEpTT04gbWFwcGluZyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBpbnRlcm5hbCB0eXBlcyBsaWtlIEFueSBhcmUgaGFuZGxlZCBqdXN0IGxpa2UgbWVzc2FnZXMuIE1vcmUgcHJlY2lzZWx5OlxuICpcbiAqIC0gTG9uZ3MgYmVjb21lIHN0cmluZ3NcbiAqIC0gRW51bXMgYmVjb21lIHN0cmluZyBrZXlzXG4gKiAtIEJ5dGVzIGJlY29tZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG4gKiAtIChTdWItKU1lc3NhZ2VzIGJlY29tZSBwbGFpbiBvYmplY3RzXG4gKiAtIE1hcHMgYmVjb21lIHBsYWluIG9iamVjdHMgd2l0aCBhbGwgc3RyaW5nIGtleXNcbiAqIC0gUmVwZWF0ZWQgZmllbGRzIGJlY29tZSBhcnJheXNcbiAqIC0gTmFOIGFuZCBJbmZpbml0eSBmb3IgZmxvYXQgYW5kIGRvdWJsZSBmaWVsZHMgYmVjb21lIHN0cmluZ3NcbiAqXG4gKiBAdHlwZSB7SUNvbnZlcnNpb25PcHRpb25zfVxuICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zP2hsPWVuI2pzb25cbiAqL1xudXRpbC50b0pTT05PcHRpb25zID0ge1xuICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgZW51bXM6IFN0cmluZyxcbiAgICBieXRlczogU3RyaW5nLFxuICAgIGpzb246IHRydWVcbn07XG5cbi8vIFNldHMgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCAoY2FsbGVkIGluIGluZGV4LW1pbmltYWwpXG51dGlsLl9jb25maWd1cmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgQnVmZmVyID0gdXRpbC5CdWZmZXI7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFCdWZmZXIpIHtcbiAgICAgICAgdXRpbC5fQnVmZmVyX2Zyb20gPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJlY2F1c2Ugbm9kZSA0LnggYnVmZmVycyBhcmUgaW5jb21wYXRpYmxlICYgaW1tdXRhYmxlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGNvZGVJTy9wcm90b2J1Zi5qcy9wdWxsLzY2NVxuICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gQnVmZmVyLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBCdWZmZXIuZnJvbSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfZnJvbSh2YWx1ZSwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZyk7XG4gICAgICAgIH07XG4gICAgdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gQnVmZmVyLmFsbG9jVW5zYWZlIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9hbGxvY1Vuc2FmZShzaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICAgICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyV3JpdGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgYmFzZTY0ICAgID0gdXRpbC5iYXNlNjQsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHdyaXRlciBvcGVyYXRpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgVWludDhBcnJheSwgbnVtYmVyKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gT3AoZm4sIGxlbiwgdmFsKSB7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfVxuICAgICAqL1xuICAgIHRoaXMuZm4gPSBmbjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IG9wZXJhdGlvbi5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbCA9IHZhbDsgLy8gdHlwZSB2YXJpZXNcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgc3RhdGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIENvcGllZCB3cml0ZXIgc3RhdGUuXG4gKiBAbWVtYmVyb2YgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7V3JpdGVyfSB3cml0ZXIgV3JpdGVyIHRvIGNvcHkgc3RhdGUgZnJvbVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBTdGF0ZSh3cml0ZXIpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaGVhZC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IHdyaXRlci5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCB0YWlsLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gd3JpdGVyLnRhaWw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IHdyaXRlci5sZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IHN0YXRlLlxuICAgICAqIEB0eXBlIHtTdGF0ZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHdyaXRlci5zdGF0ZXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXcml0ZXIoKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gMDtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgaGVhZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgdGFpbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogTGlua2VkIGZvcmtlZCBzdGF0ZXMuXG4gICAgICogQHR5cGUge09iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGVzID0gbnVsbDtcblxuICAgIC8vIFdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuLCB0aGUgd3JpdGVyIGNhbGN1bGF0ZXMgaXRzIGJ5dGUgbGVuZ3RoIGFuZCBwdXRzIGl0IGludG8gYSBsaW5rZWRcbiAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGZpbmlzaCgpIGlzIGNhbGxlZC4gVGhpcyBib3RoIGFsbG93cyB1cyB0byBhbGxvY2F0ZVxuICAgIC8vIGJ1ZmZlcnMgb2YgdGhlIGV4YWN0IHJlcXVpcmVkIHNpemUgYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGhhdmUgdG8gZG8gY29tcGFyZWRcbiAgICAvLyB0byBmaXJzdCBjYWxjdWxhdGluZyBvdmVyIG9iamVjdHMgYW5kIHRoZW4gZW5jb2Rpbmcgb3ZlciBvYmplY3RzLiBJbiBvdXIgY2FzZSwgdGhlIGVuY29kaW5nXG4gICAgLy8gcGFydCBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2FsayBjYWxsaW5nIG9wZXJhdGlvbnMgd2l0aCBhbHJlYWR5IHByZXBhcmVkIHZhbHVlcy5cbn1cblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKCkge1xuICAgICAgICAgICAgcmV0dXJuIChXcml0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlcigpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGVyKCk7XG4gICAgICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyV3JpdGVyfFdyaXRlcn0gQSB7QGxpbmsgQnVmZmVyV3JpdGVyfSB3aGVuIEJ1ZmZlcnMgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGEge0BsaW5rIFdyaXRlcn1cbiAqL1xuV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxuICovXG5Xcml0ZXIuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gICAgcmV0dXJuIG5ldyB1dGlsLkFycmF5KHNpemUpO1xufTtcblxuLy8gVXNlIFVpbnQ4QXJyYXkgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXIsIGp1c3QgbGlrZSBub2RlIGRvZXMgd2l0aCBidWZmZXJzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHV0aWwuQXJyYXkgIT09IEFycmF5KVxuICAgIFdyaXRlci5hbGxvYyA9IHV0aWwucG9vbChXcml0ZXIuYWxsb2MsIHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KTtcblxuLyoqXG4gKiBQdXNoZXMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAcHJpdmF0ZVxuICovXG5Xcml0ZXIucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gcHVzaChmbiwgbGVuLCB2YWwpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcChmbiwgbGVuLCB2YWwpO1xuICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQnl0ZSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWwgJiAyNTU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwgPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbCAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsID4+Pj0gNztcbiAgICB9XG4gICAgYnVmW3Bvc10gPSB2YWw7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHZhcmludCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGV4dGVuZHMgT3BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBWYXJpbnRPcChsZW4sIHZhbCkge1xuICAgIHRoaXMubGVuID0gbGVuO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbn1cblxuVmFyaW50T3AucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcC5wcm90b3R5cGUpO1xuVmFyaW50T3AucHJvdG90eXBlLmZuID0gd3JpdGVWYXJpbnQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50MzIgPSBmdW5jdGlvbiB3cml0ZV91aW50MzIodmFsdWUpIHtcbiAgICAvLyBoZXJlLCB0aGUgY2FsbCB0byB0aGlzLnB1c2ggaGFzIGJlZW4gaW5saW5lZCBhbmQgYSB2YXJpbnQgc3BlY2lmaWMgT3Agc3ViY2xhc3MgaXMgdXNlZC5cbiAgICAvLyB1aW50MzIgaXMgYnkgZmFyIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gYW5kIGJlbmVmaXRzIHNpZ25pZmljYW50bHkgZnJvbSB0aGlzLlxuICAgIHRoaXMubGVuICs9ICh0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBWYXJpbnRPcChcbiAgICAgICAgKHZhbHVlID0gdmFsdWUgPj4+IDApXG4gICAgICAgICAgICAgICAgPCAxMjggICAgICAgPyAxXG4gICAgICAgIDogdmFsdWUgPCAxNjM4NCAgICAgPyAyXG4gICAgICAgIDogdmFsdWUgPCAyMDk3MTUyICAgPyAzXG4gICAgICAgIDogdmFsdWUgPCAyNjg0MzU0NTYgPyA0XG4gICAgICAgIDogICAgICAgICAgICAgICAgICAgICA1LFxuICAgIHZhbHVlKSkubGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gd3JpdGVfaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPCAwXG4gICAgICAgID8gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCAxMCwgTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSkpIC8vIDEwIGJ5dGVzIHBlciBzcGVjXG4gICAgICAgIDogdGhpcy51aW50MzIodmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gd3JpdGVfc2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCh2YWx1ZSA8PCAxIF4gdmFsdWUgPj4gMzEpID4+PiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50NjQodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwuaGkpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gKHZhbC5sbyA+Pj4gNyB8IHZhbC5oaSA8PCAyNSkgPj4+IDA7XG4gICAgICAgIHZhbC5oaSA+Pj49IDc7XG4gICAgfVxuICAgIHdoaWxlICh2YWwubG8gPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gdmFsLmxvID4+PiA3O1xuICAgIH1cbiAgICBidWZbcG9zKytdID0gdmFsLmxvO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50NjQgPSBmdW5jdGlvbiB3cml0ZV91aW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQ2NCA9IFdyaXRlci5wcm90b3R5cGUudWludDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSkuenpFbmNvZGUoKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgYm9vbGlzaCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiB3cml0ZV9ib29sKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCB2YWx1ZSA/IDEgOiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlRml4ZWQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICAmIDI1NTtcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdmFsdWUgPj4+IDApO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkMzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkNjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5sbykuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmhpKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBmbG9hdCAoMzIgYml0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHdyaXRlX2Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHdyaXRlX2RvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRSwgOCwgdmFsdWUpO1xufTtcblxudmFyIHdyaXRlQnl0ZXMgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zZXRcbiAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc19mb3IodmFsLCBidWYsIHBvcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHZhbFtpXTtcbiAgICB9O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fHN0cmluZ30gdmFsdWUgQnVmZmVyIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlcyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgaWYgKCFsZW4pXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhciBidWYgPSBXcml0ZXIuYWxsb2MobGVuID0gYmFzZTY0Lmxlbmd0aCh2YWx1ZSkpO1xuICAgICAgICBiYXNlNjQuZGVjb2RlKHZhbHVlLCBidWYsIDApO1xuICAgICAgICB2YWx1ZSA9IGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudWludDMyKGxlbikuX3B1c2god3JpdGVCeXRlcywgbGVuLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0ZjgubGVuZ3RoKHZhbHVlKTtcbiAgICByZXR1cm4gbGVuXG4gICAgICAgID8gdGhpcy51aW50MzIobGVuKS5fcHVzaCh1dGY4LndyaXRlLCBsZW4sIHZhbHVlKVxuICAgICAgICA6IHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhpcyB3cml0ZXIncyBzdGF0ZSBieSBwdXNoaW5nIGl0IHRvIGEgc3RhY2suXG4gKiBDYWxsaW5nIHtAbGluayBXcml0ZXIjcmVzZXR8cmVzZXR9IG9yIHtAbGluayBXcml0ZXIjbGRlbGltfGxkZWxpbX0gcmVzZXRzIHRoZSB3cml0ZXIgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uIGZvcmsoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyk7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgIHRoaXMubGVuID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGxhc3Qgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgICB0aGlzLmhlYWQgICA9IHRoaXMuc3RhdGVzLmhlYWQ7XG4gICAgICAgIHRoaXMudGFpbCAgID0gdGhpcy5zdGF0ZXMudGFpbDtcbiAgICAgICAgdGhpcy5sZW4gICAgPSB0aGlzLnN0YXRlcy5sZW47XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMubmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgICAgIHRoaXMubGVuICA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdG8gdGhlIGxhc3Qgc3RhdGUgYW5kIGFwcGVuZHMgdGhlIGZvcmsgc3RhdGUncyBjdXJyZW50IHdyaXRlIGxlbmd0aCBhcyBhIHZhcmludCBmb2xsb3dlZCBieSBpdHMgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGxkZWxpbSgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgdGFpbCA9IHRoaXMudGFpbCxcbiAgICAgICAgbGVuICA9IHRoaXMubGVuO1xuICAgIHRoaXMucmVzZXQoKS51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gaGVhZC5uZXh0OyAvLyBza2lwIG5vb3BcbiAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQubmV4dCwgLy8gc2tpcCBub29wXG4gICAgICAgIGJ1ZiAgPSB0aGlzLmNvbnN0cnVjdG9yLmFsbG9jKHRoaXMubGVuKSxcbiAgICAgICAgcG9zICA9IDA7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgaGVhZC5mbihoZWFkLnZhbCwgYnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gaGVhZC5sZW47XG4gICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIC8vIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyV3JpdGVyXykge1xuICAgIEJ1ZmZlcldyaXRlciA9IEJ1ZmZlcldyaXRlcl87XG4gICAgV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcldyaXRlcjtcblxuLy8gZXh0ZW5kcyBXcml0ZXJcbnZhciBXcml0ZXIgPSByZXF1aXJlKFwiLi93cml0ZXJcIik7XG4oQnVmZmVyV3JpdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQnVmZmVyV3JpdGVyO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1ZmZlciB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBub2RlIGJ1ZmZlcnMuXG4gKiBAZXh0ZW5kcyBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBCdWZmZXJXcml0ZXIoKSB7XG4gICAgV3JpdGVyLmNhbGwodGhpcyk7XG59XG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcbiAgICAgKiBAcmV0dXJucyB7QnVmZmVyfSBCdWZmZXJcbiAgICAgKi9cbiAgICBCdWZmZXJXcml0ZXIuYWxsb2MgPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmU7XG5cbiAgICBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwuQnVmZmVyICYmIHV0aWwuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiXG4gICAgICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICAgIGJ1Zi5zZXQodmFsLCBwb3MpOyAvLyBmYXN0ZXIgdGhhbiBjb3B5IChyZXF1aXJlcyBub2RlID49IDQgd2hlcmUgQnVmZmVycyBleHRlbmQgVWludDhBcnJheSBhbmQgc2V0IGlzIHByb3Blcmx5IGluaGVyaXRlZClcbiAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIHdyaXRlQnl0ZXNCdWZmZXJfY29weSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgaWYgKHZhbC5jb3B5KSAvLyBCdWZmZXIgdmFsdWVzXG4gICAgICAgICAgICB2YWwuY29weShidWYsIHBvcywgMCwgdmFsLmxlbmd0aCk7XG4gICAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7KSAvLyBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSB2YWxbaSsrXTtcbiAgICAgICAgfTtcbn07XG5cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzX2J1ZmZlcih2YWx1ZSkge1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgdmFsdWUgPSB1dGlsLl9CdWZmZXJfZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIik7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2goQnVmZmVyV3JpdGVyLndyaXRlQnl0ZXNCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVTdHJpbmdCdWZmZXIodmFsLCBidWYsIHBvcykge1xuICAgIGlmICh2YWwubGVuZ3RoIDwgNDApIC8vIHBsYWluIGpzIGlzIGZhc3RlciBmb3Igc2hvcnQgc3RyaW5ncyAocHJvYmFibHkgZHVlIHRvIHJlZHVuZGFudCBhc3NlcnRpb25zKVxuICAgICAgICB1dGlsLnV0Zjgud3JpdGUodmFsLCBidWYsIHBvcyk7XG4gICAgZWxzZSBpZiAoYnVmLnV0ZjhXcml0ZSlcbiAgICAgICAgYnVmLnV0ZjhXcml0ZSh2YWwsIHBvcyk7XG4gICAgZWxzZVxuICAgICAgICBidWYud3JpdGUodmFsLCBwb3MpO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlX3N0cmluZ19idWZmZXIodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRpbC5CdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gICAgdGhpcy51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKVxuICAgICAgICB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBsZW4sIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQG5hbWUgQnVmZmVyV3JpdGVyI2ZpbmlzaFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuXG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRlcjtcblxudmFyIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIEJ1ZmZlclJlYWRlcjsgLy8gY3ljbGljXG5cbnZhciBMb25nQml0cyAgPSB1dGlsLkxvbmdCaXRzLFxuICAgIHV0ZjggICAgICA9IHV0aWwudXRmODtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShyZWFkZXIsIHdyaXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2U6IFwiICsgcmVhZGVyLnBvcyArIFwiICsgXCIgKyAod3JpdGVMZW5ndGggfHwgMSkgKyBcIiA+IFwiICsgcmVhZGVyLmxlbik7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByZWFkZXIgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHJlYWRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBSZWFkZXIoYnVmZmVyKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAdHlwZSB7VWludDhBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZiA9IGJ1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIHBvc2l0aW9uLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wb3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBidWZmZXIubGVuZ3RoO1xufVxuXG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IGZ1bmN0aW9uIGNyZWF0ZV90eXBlZF9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfTtcblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKGJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFkZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5CdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBCdWZmZXJSZWFkZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZV9hcnJheShidWZmZXIpO1xuICAgICAgICAgICAgfSkoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGNyZWF0ZV9hcnJheTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7VWludDhBcnJheXxCdWZmZXJ9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKiBAcmV0dXJucyB7UmVhZGVyfEJ1ZmZlclJlYWRlcn0gQSB7QGxpbmsgQnVmZmVyUmVhZGVyfSBpZiBgYnVmZmVyYCBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGEge0BsaW5rIFJlYWRlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgYnVmZmVyYCBpcyBub3QgYSB2YWxpZCBidWZmZXJcbiAqL1xuUmVhZGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG5SZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnVpbnQzMiA9IChmdW5jdGlvbiByZWFkX3VpbnQzMl9zZXR1cCgpIHtcbiAgICB2YXIgdmFsdWUgPSA0Mjk0OTY3Mjk1OyAvLyBvcHRpbWl6ZXIgdHlwZS1oaW50LCB0ZW5kcyB0byBkZW9wdCBvdGhlcndpc2UgKD8hKVxuICAgIHJldHVybiBmdW5jdGlvbiByZWFkX3VpbnQzMigpIHtcbiAgICAgICAgdmFsdWUgPSAoICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3NdICYgMTI3ICAgICAgICkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8ICA3KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyMSkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAgMTUpIDw8IDI4KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodGhpcy5wb3MgKz0gNSkgPiB0aGlzLmxlbikge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLmxlbjtcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIHJlYWRfaW50MzIoKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ludDMyKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudWludDMyKCk7XG4gICAgcmV0dXJuIHZhbHVlID4+PiAxIF4gLSh2YWx1ZSAmIDEpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkTG9uZ1ZhcmludCgpIHtcbiAgICAvLyB0ZW5kcyB0byBkZW9wdCB3aXRoIGxvY2FsIHZhcnMgZm9yIG9jdGV0IGV0Yy5cbiAgICB2YXIgYml0cyA9IG5ldyBMb25nQml0cygwLCAwKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGxvKVxuICAgICAgICBmb3IgKDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgLy8gMXN0Li40dGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA1dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjgpID4+PiAwO1xuICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA+PiAgNCkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDM7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gMXN0Li4zdGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA0dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAoaGkpXG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIHZhcmludCBlbmNvZGluZ1wiKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciN1aW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjc2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiByZWFkX2Jvb2woKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgIT09IDA7XG59O1xuXG5mdW5jdGlvbiByZWFkRml4ZWQzMl9lbmQoYnVmLCBlbmQpIHsgLy8gbm90ZSB0aGF0IHRoaXMgdXNlcyBgZW5kYCwgbm90IGBwb3NgXG4gICAgcmV0dXJuIChidWZbZW5kIC0gNF1cbiAgICAgICAgICB8IGJ1ZltlbmQgLSAzXSA8PCA4XG4gICAgICAgICAgfCBidWZbZW5kIC0gMl0gPDwgMTZcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gcmVhZF9maXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KTtcbn07XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgvKiB0aGlzOiBSZWFkZXIgKi8pIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDgpO1xuXG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIHppZy16YWcgZW5jb2RlZCBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI3NmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIGZsb2F0ICgzMiBiaXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZmxvYXQgPSBmdW5jdGlvbiByZWFkX2Zsb2F0KCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gNDtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gcmVhZF9kb3VibGUoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZERvdWJsZUxFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gODtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gcmVhZF9ieXRlcygpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy51aW50MzIoKSxcbiAgICAgICAgc3RhcnQgID0gdGhpcy5wb3MsXG4gICAgICAgIGVuZCAgICA9IHRoaXMucG9zICsgbGVuZ3RoO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVuZCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcblxuICAgIHRoaXMucG9zICs9IGxlbmd0aDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpIC8vIHBsYWluIGFycmF5XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zbGljZShzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gc3RhcnQgPT09IGVuZCAvLyBmaXggZm9yIElFIDEwL1dpbjggYW5kIG90aGVycycgc3ViYXJyYXkgcmV0dXJuaW5nIGFycmF5IG9mIHNpemUgMVxuICAgICAgICA/IG5ldyB0aGlzLmJ1Zi5jb25zdHJ1Y3RvcigwKVxuICAgICAgICA6IHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIHN0YXJ0LCBlbmQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHN0cmluZyBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge3N0cmluZ30gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nKCkge1xuICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXMoKTtcbiAgICByZXR1cm4gdXRmOC5yZWFkKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBza2lwcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggaWYga25vd24sIG90aGVyd2lzZSBhIHZhcmludCBpcyBhc3N1bWVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMucG9zICsgbGVuZ3RoID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgfSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHdpcmUgdHlwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3aXJlVHlwZSBXaXJlIHR5cGUgcmVjZWl2ZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXBUeXBlID0gZnVuY3Rpb24od2lyZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgd2hpbGUgKCh3aXJlVHlwZSA9IHRoaXMudWludDMyKCkgJiA3KSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFR5cGUod2lyZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUgKyBcIiBhdCBvZmZzZXQgXCIgKyB0aGlzLnBvcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJSZWFkZXJfKSB7XG4gICAgQnVmZmVyUmVhZGVyID0gQnVmZmVyUmVhZGVyXztcbiAgICBSZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcblxuICAgIHZhciBmbiA9IHV0aWwuTG9uZyA/IFwidG9Mb25nXCIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcInRvTnVtYmVyXCI7XG4gICAgdXRpbC5tZXJnZShSZWFkZXIucHJvdG90eXBlLCB7XG5cbiAgICAgICAgaW50NjQ6IGZ1bmN0aW9uIHJlYWRfaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpbnQ2NDogZnVuY3Rpb24gcmVhZF91aW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ludDY0OiBmdW5jdGlvbiByZWFkX3NpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaXhlZDY0OiBmdW5jdGlvbiByZWFkX2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyUmVhZGVyO1xuXG4vLyBleHRlbmRzIFJlYWRlclxudmFyIFJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbihCdWZmZXJSZWFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWFkZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJSZWFkZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHJlYWRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFJlYWRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGJ1ZmZlcikge1xuICAgIFJlYWRlci5jYWxsKHRoaXMsIGJ1ZmZlcik7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnVmXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbn1cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodXRpbC5CdWZmZXIpXG4gICAgICAgIEJ1ZmZlclJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5CdWZmZXIucHJvdG90eXBlLnNsaWNlO1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nX2J1ZmZlcigpIHtcbiAgICB2YXIgbGVuID0gdGhpcy51aW50MzIoKTsgLy8gbW9kaWZpZXMgcG9zXG4gICAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZVxuICAgICAgICA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKVxuICAgICAgICA6IHRoaXMuYnVmLnRvU3RyaW5nKFwidXRmLThcIiwgdGhpcy5wb3MsIHRoaXMucG9zID0gTWF0aC5taW4odGhpcy5wb3MgKyBsZW4sIHRoaXMubGVuKSk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnl0ZXNcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcn0gVmFsdWUgcmVhZFxuICovXG5cbkJ1ZmZlclJlYWRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gU2VydmljZTtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vLyBFeHRlbmRzIEV2ZW50RW1pdHRlclxuKFNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh1dGlsLkV2ZW50RW1pdHRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IFNlcnZpY2U7XG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBycGMuU2VydmljZU1ldGhvZHxTZXJ2aWNlTWV0aG9kfS5cbiAqXG4gKiBEaWZmZXJzIGZyb20ge0BsaW5rIFJQQ0ltcGxDYWxsYmFja30gaW4gdGhhdCBpdCBpcyBhbiBhY3R1YWwgY2FsbGJhY2sgb2YgYSBzZXJ2aWNlIG1ldGhvZCB3aGljaCBtYXkgbm90IHJldHVybiBgcmVzcG9uc2UgPSBudWxsYC5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2tcbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gKiBAcGFyYW0ge1RSZXN9IFtyZXNwb25zZV0gUmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgcGFydCBvZiBhIHtAbGluayBycGMuU2VydmljZX0gYXMgY3JlYXRlZCBieSB7QGxpbmsgU2VydmljZS5jcmVhdGV9LlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RcbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IFtjYWxsYmFja10gTm9kZS1zdHlsZSBjYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgZXJyb3IsIGlmIGFueSwgYW5kIHRoZSByZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPFRSZXM+Pn0gUHJvbWlzZSBpZiBgY2FsbGJhY2tgIGhhcyBiZWVuIG9taXR0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBSUEMgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQW4gUlBDIHNlcnZpY2UgYXMgcmV0dXJuZWQgYnkge0BsaW5rIFNlcnZpY2UjY3JlYXRlfS5cbiAqIEBleHBvcnRzIHJwYy5TZXJ2aWNlXG4gKiBAZXh0ZW5kcyB1dGlsLkV2ZW50RW1pdHRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1JQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuXG4gICAgaWYgKHR5cGVvZiBycGNJbXBsICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXG4gICAgdXRpbC5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFJQQyBpbXBsZW1lbnRhdGlvbi4gQmVjb21lcyBgbnVsbGAgb25jZSB0aGUgc2VydmljZSBpcyBlbmRlZC5cbiAgICAgKiBAdHlwZSB7UlBDSW1wbHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucnBjSW1wbCA9IHJwY0ltcGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWVzdERlbGltaXRlZCA9IEJvb2xlYW4ocmVxdWVzdERlbGltaXRlZCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlRGVsaW1pdGVkID0gQm9vbGVhbihyZXNwb25zZURlbGltaXRlZCk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBzZXJ2aWNlIG1ldGhvZCB0aHJvdWdoIHtAbGluayBycGMuU2VydmljZSNycGNJbXBsfHJwY0ltcGx9LlxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8VFJlcSxUUmVzPn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXE+fSByZXF1ZXN0Q3RvciBSZXF1ZXN0IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXM+fSByZXNwb25zZUN0b3IgUmVzcG9uc2UgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gY2FsbGJhY2sgU2VydmljZSBjYWxsYmFja1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJwY0NhbGwgPSBmdW5jdGlvbiBycGNDYWxsKG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCwgY2FsbGJhY2spIHtcblxuICAgIGlmICghcmVxdWVzdClcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicmVxdWVzdCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIWNhbGxiYWNrKVxuICAgICAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UocnBjQ2FsbCwgc2VsZiwgbWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0KTtcblxuICAgIGlmICghc2VsZi5ycGNJbXBsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKEVycm9yKFwiYWxyZWFkeSBlbmRlZFwiKSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLnJwY0ltcGwoXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0Q3RvcltzZWxmLnJlcXVlc3REZWxpbWl0ZWQgPyBcImVuY29kZURlbGltaXRlZFwiIDogXCJlbmNvZGVcIl0ocmVxdWVzdCkuZmluaXNoKCksXG4gICAgICAgICAgICBmdW5jdGlvbiBycGNDYWxsYmFjayhlcnIsIHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kKC8qIGVuZGVkQnlSUEMgKi8gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgaW5zdGFuY2VvZiByZXNwb25zZUN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlQ3RvcltzZWxmLnJlc3BvbnNlRGVsaW1pdGVkID8gXCJkZWNvZGVEZWxpbWl0ZWRcIiA6IFwiZGVjb2RlXCJdKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImRhdGFcIiwgcmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlcnIpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIEVuZHMgdGhpcyBzZXJ2aWNlIGFuZCBlbWl0cyB0aGUgYGVuZGAgZXZlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtlbmRlZEJ5UlBDPWZhbHNlXSBXaGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGVuZGVkIGJ5IHRoZSBSUEMgaW1wbGVtZW50YXRpb24uXG4gKiBAcmV0dXJucyB7cnBjLlNlcnZpY2V9IGB0aGlzYFxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiBlbmQoZW5kZWRCeVJQQykge1xuICAgIGlmICh0aGlzLnJwY0ltcGwpIHtcbiAgICAgICAgaWYgKCFlbmRlZEJ5UlBDKSAvLyBzaWduYWwgZW5kIHRvIHJwY0ltcGxcbiAgICAgICAgICAgIHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgdGhpcy5ycGNJbXBsID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBTdHJlYW1pbmcgUlBDIGhlbHBlcnMuXG4gKiBAbmFtZXNwYWNlXG4gKi9cbnZhciBycGMgPSBleHBvcnRzO1xuXG4vKipcbiAqIFJQQyBpbXBsZW1lbnRhdGlvbiBwYXNzZWQgdG8ge0BsaW5rIFNlcnZpY2UjY3JlYXRlfSBwZXJmb3JtaW5nIGEgc2VydmljZSByZXF1ZXN0IG9uIG5ldHdvcmsgbGV2ZWwsIGkuZS4gYnkgdXRpbGl6aW5nIGh0dHAgcmVxdWVzdHMgb3Igd2Vic29ja2V0cy5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPE1lc3NhZ2U8e30+LE1lc3NhZ2U8e30+Pn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHtVaW50OEFycmF5fSByZXF1ZXN0RGF0YSBSZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7UlBDSW1wbENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBycGNJbXBsKG1ldGhvZCwgcmVxdWVzdERhdGEsIGNhbGxiYWNrKSB7XG4gKiAgICAgaWYgKHByb3RvYnVmLnV0aWwubGNGaXJzdChtZXRob2QubmFtZSkgIT09IFwibXlNZXRob2RcIikgLy8gY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBjb2RlXG4gKiAgICAgICAgIHRocm93IEVycm9yKFwibm8gc3VjaCBtZXRob2RcIik7XG4gKiAgICAgYXN5bmNocm9ub3VzbHlPYnRhaW5BUmVzcG9uc2UocmVxdWVzdERhdGEsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2VEYXRhKSB7XG4gKiAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2VEYXRhKTtcbiAqICAgICB9KTtcbiAqIH1cbiAqL1xuXG4vKipcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgUlBDSW1wbH0uXG4gKiBAdHlwZWRlZiBSUENJbXBsQ2FsbGJhY2tcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxuICogQHBhcmFtIHtVaW50OEFycmF5fG51bGx9IFtyZXNwb25zZV0gUmVzcG9uc2UgZGF0YSBvciBgbnVsbGAgdG8gc2lnbmFsIGVuZCBvZiBzdHJlYW0sIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbnJwYy5TZXJ2aWNlID0gcmVxdWlyZShcIi4vcnBjL3NlcnZpY2VcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKlxuICogTmFtZWQgcm9vdHMuXG4gKiBUaGlzIGlzIHdoZXJlIHBianMgc3RvcmVzIGdlbmVyYXRlZCBzdHJ1Y3R1cmVzICh0aGUgb3B0aW9uIGAtciwgLS1yb290YCBzcGVjaWZpZXMgYSBuYW1lKS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgbWFudWFsbHkgdG8gbWFrZSByb290cyBhdmFpbGFibGUgYWNjcm9zcyBtb2R1bGVzLlxuICogQG5hbWUgcm9vdHNcbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxSb290Pn1cbiAqIEBleGFtcGxlXG4gKiAvLyBwYmpzIC1yIG15cm9vdCAtbyBjb21waWxlZC5qcyAuLi5cbiAqXG4gKiAvLyBpbiBhbm90aGVyIG1vZHVsZTpcbiAqIHJlcXVpcmUoXCIuL2NvbXBpbGVkLmpzXCIpO1xuICpcbiAqIC8vIGluIGFueSBzdWJzZXF1ZW50IG1vZHVsZTpcbiAqIHZhciByb290ID0gcHJvdG9idWYucm9vdHNbXCJteXJvb3RcIl07XG4gKi9cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHByb3RvYnVmID0gZXhwb3J0cztcblxuLyoqXG4gKiBCdWlsZCB0eXBlLCBvbmUgb2YgYFwiZnVsbFwiYCwgYFwibGlnaHRcImAgb3IgYFwibWluaW1hbFwiYC5cbiAqIEBuYW1lIGJ1aWxkXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGNvbnN0XG4gKi9cbnByb3RvYnVmLmJ1aWxkID0gXCJtaW5pbWFsXCI7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLldyaXRlciAgICAgICA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlcldyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlcl9idWZmZXJcIik7XG5wcm90b2J1Zi5SZWFkZXIgICAgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJfYnVmZmVyXCIpO1xuXG4vLyBVdGlsaXR5XG5wcm90b2J1Zi51dGlsICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5wcm90b2J1Zi5ycGMgICAgICAgICAgPSByZXF1aXJlKFwiLi9ycGNcIik7XG5wcm90b2J1Zi5yb290cyAgICAgICAgPSByZXF1aXJlKFwiLi9yb290c1wiKTtcbnByb3RvYnVmLmNvbmZpZ3VyZSAgICA9IGNvbmZpZ3VyZTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qKlxuICogUmVjb25maWd1cmVzIHRoZSBsaWJyYXJ5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmUoKSB7XG4gICAgcHJvdG9idWYudXRpbC5fY29uZmlndXJlKCk7XG4gICAgcHJvdG9idWYuV3JpdGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyV3JpdGVyKTtcbiAgICBwcm90b2J1Zi5SZWFkZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJSZWFkZXIpO1xufVxuXG4vLyBTZXQgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudFxuY29uZmlndXJlKCk7XG4iLCIvLyBtaW5pbWFsIGxpYnJhcnkgZW50cnkgcG9pbnQuXG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9zcmMvaW5kZXgtbWluaW1hbFwiKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdG9yIHtcbiAgc3RhdGVzOiBQQkFuaW1hdGlvblN0YXRlW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdGlvblN0YXRlIHtcbiAgbmFtZTogc3RyaW5nXG4gIGNsaXA6IHN0cmluZ1xuICBwbGF5aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBzICovXG4gIHdlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgc3BlZWQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzaG91bGRSZXNldD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKTogUEJBbmltYXRvciB7XG4gIHJldHVybiB7IHN0YXRlczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdG9yID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRvciwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnN0YXRlcykge1xuICAgICAgUEJBbmltYXRpb25TdGF0ZS5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQW5pbWF0b3Ige1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnN0YXRlcy5wdXNoKFBCQW5pbWF0aW9uU3RhdGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0aW9uU3RhdGUoKTogUEJBbmltYXRpb25TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJycsXG4gICAgY2xpcDogJycsXG4gICAgcGxheWluZzogdW5kZWZpbmVkLFxuICAgIHdlaWdodDogdW5kZWZpbmVkLFxuICAgIHNwZWVkOiB1bmRlZmluZWQsXG4gICAgbG9vcDogdW5kZWZpbmVkLFxuICAgIHNob3VsZFJlc2V0OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdGlvblN0YXRlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRpb25TdGF0ZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGlwICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuY2xpcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxheWluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UucGxheWluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2VpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uud2VpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGVlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLnNwZWVkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5sb29wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaG91bGRSZXNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU2KS5ib29sKG1lc3NhZ2Uuc2hvdWxkUmVzZXQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkFuaW1hdGlvblN0YXRlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkFuaW1hdGlvblN0YXRlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuY2xpcCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uud2VpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5zcGVlZCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UubG9vcCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5zaG91bGRSZXNldCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBbmltYXRvciB9IGZyb20gJy4vcGIvQW5pbWF0b3IuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3JTY2hlbWE6IElTY2hlbWE8UEJBbmltYXRvcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBbmltYXRvciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQW5pbWF0b3IuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQW5pbWF0b3Ige1xuICAgIHJldHVybiBQQkFuaW1hdG9yLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBbmltYXRvciB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQW5pbWF0b3IuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF1ZGlvU291cmNlIHtcbiAgcGxheWluZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICB2b2x1bWU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgbG9vcD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICBwaXRjaD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBhdWRpb0NsaXBVcmw6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgcmV0dXJuIHsgcGxheWluZzogdW5kZWZpbmVkLCB2b2x1bWU6IHVuZGVmaW5lZCwgbG9vcDogdW5kZWZpbmVkLCBwaXRjaDogdW5kZWZpbmVkLCBhdWRpb0NsaXBVcmw6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdWRpb1NvdXJjZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXVkaW9Tb3VyY2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZvbHVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnZvbHVtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubG9vcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UubG9vcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGl0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5waXRjaClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXVkaW9DbGlwVXJsICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXVkaW9DbGlwVXJsKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucGxheWluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS52b2x1bWUgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmxvb3AgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UucGl0Y2ggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmF1ZGlvQ2xpcFVybCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF1ZGlvU291cmNlIH0gZnJvbSAnLi9wYi9BdWRpb1NvdXJjZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDIwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb1NvdXJjZVNjaGVtYTogSVNjaGVtYTxQQkF1ZGlvU291cmNlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF1ZGlvU291cmNlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdWRpb1NvdXJjZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdWRpb1NvdXJjZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJBbmNob3JQb2ludCB7XG4gIFBPU0lUSU9OID0gMCxcbiAgTkFNRV9UQUcgPSAxLFxuICBMRUZUX0hBTkQgPSAyLFxuICBSSUdIVF9IQU5EID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhckF0dGFjaCB7XG4gIGF2YXRhcklkOiBzdHJpbmdcbiAgYW5jaG9yUG9pbnRJZDogQXZhdGFyQW5jaG9yUG9pbnRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXZhdGFyQXR0YWNoKCk6IFBCQXZhdGFyQXR0YWNoIHtcbiAgcmV0dXJuIHsgYXZhdGFySWQ6ICcnLCBhbmNob3JQb2ludElkOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdmF0YXJBdHRhY2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkF2YXRhckF0dGFjaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmF2YXRhcklkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuYXZhdGFySWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFuY2hvclBvaW50SWQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYW5jaG9yUG9pbnRJZClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXZhdGFyQXR0YWNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhckF0dGFjaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYXZhdGFySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5hbmNob3JQb2ludElkID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXZhdGFyQXR0YWNoIH0gZnJvbSAnLi9wYi9BdmF0YXJBdHRhY2guZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3M1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoU2NoZW1hOiBJU2NoZW1hPFBCQXZhdGFyQXR0YWNoPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF2YXRhckF0dGFjaCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyQXR0YWNoLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF2YXRhckF0dGFjaCB7XG4gICAgcmV0dXJuIFBCQXZhdGFyQXR0YWNoLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJBdHRhY2gge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF2YXRhckF0dGFjaC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvcjMge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIHo6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVmVjdG9yMygpOiBWZWN0b3IzIHtcbiAgcmV0dXJuIHsgeDogMCwgeTogMCwgejogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZlY3RvcjMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBWZWN0b3IzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnogIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UueilcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFZlY3RvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVZlY3RvcjMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnogPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJNb2RpZmllciB7XG4gIEhJREVfQVZBVEFSUyA9IDAsXG4gIERJU0FCTEVfUEFTU1BPUlRTID0gMSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZXhjbHVkZUlkczogc3RyaW5nW11cbiAgbW9kaWZpZXJzOiBBdmF0YXJNb2RpZmllcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF2YXRhck1vZGlmaWVyQXJlYSgpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIHJldHVybiB7IGFyZWE6IHVuZGVmaW5lZCwgZXhjbHVkZUlkczogW10sIG1vZGlmaWVyczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhck1vZGlmaWVyQXJlYSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXZhdGFyTW9kaWZpZXJBcmVhLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYXJlYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmFyZWEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXhjbHVkZUlkcykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKHYhKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDI2KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5tb2RpZmllcnMpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXZhdGFyTW9kaWZpZXJBcmVhKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5hcmVhID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZXhjbHVkZUlkcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLm1vZGlmaWVycy5wdXNoKHJlYWRlci5pbnQzMigpIGFzIGFueSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS5tb2RpZmllcnMucHVzaChyZWFkZXIuaW50MzIoKSBhcyBhbnkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF2YXRhck1vZGlmaWVyQXJlYSB9IGZyb20gJy4vcGIvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYTogSVNjaGVtYTxQQkF2YXRhck1vZGlmaWVyQXJlYT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJNb2RpZmllckFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF2YXRhck1vZGlmaWVyQXJlYS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIHJldHVybiBQQkF2YXRhck1vZGlmaWVyQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdmF0YXJNb2RpZmllckFyZWEuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gTG9uZztcclxuXHJcbi8qKlxyXG4gKiB3YXNtIG9wdGltaXphdGlvbnMsIHRvIGRvIG5hdGl2ZSBpNjQgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlkZVxyXG4gKi9cclxudmFyIHdhc20gPSBudWxsO1xyXG5cclxudHJ5IHtcclxuICB3YXNtID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUobmV3IFVpbnQ4QXJyYXkoW1xyXG4gICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCAxMywgMiwgOTYsIDAsIDEsIDEyNywgOTYsIDQsIDEyNywgMTI3LCAxMjcsIDEyNywgMSwgMTI3LCAzLCA3LCA2LCAwLCAxLCAxLCAxLCAxLCAxLCA2LCA2LCAxLCAxMjcsIDEsIDY1LCAwLCAxMSwgNywgNTAsIDYsIDMsIDEwOSwgMTE3LCAxMDgsIDAsIDEsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTUsIDAsIDIsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTcsIDAsIDMsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTUsIDAsIDQsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTcsIDAsIDUsIDgsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDQsIDEwNSwgMTAzLCAxMDQsIDAsIDAsIDEwLCAxOTEsIDEsIDYsIDQsIDAsIDM1LCAwLCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI2LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjcsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyOCwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI5LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMzAsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTFcclxuICBdKSksIHt9KS5leHBvcnRzO1xyXG59IGNhdGNoIChlKSB7XHJcbiAgLy8gbm8gd2FzbSBzdXBwb3J0IDooXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciwgZ2l2ZW4gaXRzIGxvdyBhbmQgaGlnaCAzMiBiaXQgdmFsdWVzIGFzICpzaWduZWQqIGludGVnZXJzLlxyXG4gKiAgU2VlIHRoZSBmcm9tKiBmdW5jdGlvbnMgYmVsb3cgZm9yIG1vcmUgY29udmVuaWVudCB3YXlzIG9mIGNvbnN0cnVjdGluZyBMb25ncy5cclxuICogQGV4cG9ydHMgTG9uZ1xyXG4gKiBAY2xhc3MgQSBMb25nIGNsYXNzIGZvciByZXByZXNlbnRpbmcgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBMb25nKGxvdywgaGlnaCwgdW5zaWduZWQpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb3cgMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubG93ID0gbG93IHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoaWdoIDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhpZ2ggPSBoaWdoIHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkO1xyXG59XHJcblxyXG4vLyBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBsb25nIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxyXG4vLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxyXG4vLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcclxuLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxyXG4vLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xyXG4vLyBvciBjaGFuZ2UgaW4gc2lnbi5cclxuLy9cclxuLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxyXG4vLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cclxuLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXHJcbi8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcclxuLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xyXG4vLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXHJcbi8vXHJcbi8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxyXG4vLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxyXG5cclxuLyoqXHJcbiAqIEFuIGluZGljYXRvciB1c2VkIHRvIHJlbGlhYmx5IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBMb25nIG9yIG5vdC5cclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBjb25zdFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuTG9uZy5wcm90b3R5cGUuX19pc0xvbmdfXztcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nLnByb3RvdHlwZSwgXCJfX2lzTG9uZ19fXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0xvbmcob2JqKSB7XHJcbiAgICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzTG9uZ19fXCJdKSA9PT0gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgTG9uZy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmcuaXNMb25nID0gaXNMb25nO1xyXG5cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIExvbmcgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIGludGVnZXIgdmFsdWVzLlxyXG4gKiBAdHlwZSB7IU9iamVjdH1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQSBjYWNoZSBvZiB0aGUgTG9uZyByZXByZXNlbnRhdGlvbnMgb2Ygc21hbGwgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuXHJcbiAqIEB0eXBlIHshT2JqZWN0fVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tSW50KHZhbHVlLCB1bnNpZ25lZCkge1xyXG4gICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTtcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIHZhbHVlID4+Pj0gMDtcclxuICAgICAgICBpZiAoY2FjaGUgPSAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikpIHtcclxuICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgKHZhbHVlIHwgMCkgPCAwID8gLTEgOiAwLCB0cnVlKTtcclxuICAgICAgICBpZiAoY2FjaGUpXHJcbiAgICAgICAgICAgIFVJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlIHw9IDA7XHJcbiAgICAgICAgaWYgKGNhY2hlID0gKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgdmFsdWUgPCAwID8gLTEgOiAwLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlKVxyXG4gICAgICAgICAgICBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSAzMiBiaXQgaW50ZWdlciBpbiBxdWVzdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tSW50ID0gZnJvbUludDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKVxyXG4gICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgICAgIHJldHVybiBVWkVSTztcclxuICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICAgICAgaWYgKHZhbHVlICsgMSA+PSBUV09fUFdSXzYzX0RCTClcclxuICAgICAgICAgICAgcmV0dXJuIE1BWF9WQUxVRTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwpIHwgMCwgKHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCwgdW5zaWduZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB2YWx1ZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyBhIGZpbml0ZSBudW1iZXIuIE90aGVyd2lzZSwgemVybyBpcyByZXR1cm5lZC5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgbnVtYmVyIGluIHF1ZXN0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbUJpdHMobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xyXG4gKiAgYXNzdW1lZCB0byB1c2UgMzIgYml0cy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHMgVGhlIGhpZ2ggMzIgYml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQml0cyA9IGZyb21CaXRzO1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gYmFzZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZXhwb25lbnRcclxuICogQHJldHVybnMge251bWJlcn1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgcG93X2RibCA9IE1hdGgucG93OyAvLyBVc2VkIDQgdGltZXMgKDQqOCB0byAxNSs0KVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcclxuICogQHBhcmFtIHsoYm9vbGVhbnxudW1iZXIpPX0gdW5zaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkge1xyXG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2VtcHR5IHN0cmluZycpO1xyXG4gICAgaWYgKHN0ciA9PT0gXCJOYU5cIiB8fCBzdHIgPT09IFwiSW5maW5pdHlcIiB8fCBzdHIgPT09IFwiK0luZmluaXR5XCIgfHwgc3RyID09PSBcIi1JbmZpbml0eVwiKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKHR5cGVvZiB1bnNpZ25lZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAvLyBGb3IgZ29vZy5tYXRoLmxvbmcgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgIHJhZGl4ID0gdW5zaWduZWQsXHJcbiAgICAgICAgdW5zaWduZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5zaWduZWQgPSAhISB1bnNpZ25lZDtcclxuICAgIH1cclxuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XHJcbiAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpXHJcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXgnKTtcclxuXHJcbiAgICB2YXIgcDtcclxuICAgIGlmICgocCA9IHN0ci5pbmRleE9mKCctJykpID4gMClcclxuICAgICAgICB0aHJvdyBFcnJvcignaW50ZXJpb3IgaHlwaGVuJyk7XHJcbiAgICBlbHNlIGlmIChwID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgdW5zaWduZWQsIHJhZGl4KS5uZWcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gWkVSTztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSA4KSB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksXHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTtcclxuICAgICAgICBpZiAoc2l6ZSA8IDgpIHtcclxuICAgICAgICAgICAgdmFyIHBvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCBzaXplKSk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocG93ZXIpLmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChyYWRpeFRvUG93ZXIpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHQudW5zaWduZWQgPSB1bnNpZ25lZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nXHJcbiAqIEBwYXJhbSB7KGJvb2xlYW58bnVtYmVyKT19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBUaGUgcmFkaXggaW4gd2hpY2ggdGhlIHRleHQgaXMgd3JpdHRlbiAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tU3RyaW5nID0gZnJvbVN0cmluZztcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlciwgdW5zaWduZWQ6IGJvb2xlYW59fSB2YWxcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7XHJcbiAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBMb25nOlxyXG4gICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICdib29sZWFuJyA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBMb25nIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmcm9tKiBmdW5jdGlvbiBmb3IgaXRzIHR5cGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbCBWYWx1ZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmcuZnJvbVZhbHVlID0gZnJvbVZhbHVlO1xyXG5cclxuLy8gTk9URTogdGhlIGNvbXBpbGVyIHNob3VsZCBpbmxpbmUgdGhlc2UgY29uc3RhbnQgdmFsdWVzIGJlbG93IGFuZCB0aGVuIHJlbW92ZSB0aGVzZSB2YXJpYWJsZXMsIHNvIHRoZXJlIHNob3VsZCBiZVxyXG4vLyBubyBydW50aW1lIHBlbmFsdHkgZm9yIHRoZXNlLlxyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8zMl9EQkwgPSBUV09fUFdSXzE2X0RCTCAqIFRXT19QV1JfMTZfREJMO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFpFUk8gPSBmcm9tSW50KDApO1xyXG5cclxuLyoqXHJcbiAqIFNpZ25lZCB6ZXJvLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLlpFUk8gPSBaRVJPO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVVpFUk8gPSBmcm9tSW50KDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIFVuc2lnbmVkIHplcm8uXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVVpFUk8gPSBVWkVSTztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE9ORSA9IGZyb21JbnQoMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5PTkUgPSBPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVT05FID0gZnJvbUludCgxLCB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBVbnNpZ25lZCBvbmUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVU9ORSA9IFVPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBORUdfT05FID0gZnJvbUludCgtMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG5lZ2F0aXZlIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5ORUdfT05FID0gTkVHX09ORTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE1BWF9WQUxVRSA9IGZyb21CaXRzKDB4RkZGRkZGRkZ8MCwgMHg3RkZGRkZGRnwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoMHhGRkZGRkZGRnwwLCAweEZGRkZGRkZGfDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIE1heGltdW0gdW5zaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMHg4MDAwMDAwMHwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWluaW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBMb25nLnByb3RvdHlwZVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBMb25nUHJvdG90eXBlID0gTG9uZy5wcm90b3R5cGU7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIExvbmcgdG8gYSAzMiBiaXQgaW50ZWdlciwgYXNzdW1pbmcgaXQgaXMgYSAzMiBiaXQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiB0b0ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHRoZSBuZWFyZXN0IGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdmFsdWUgKGRvdWJsZSwgNTMgYml0IG1hbnRpc3NhKS5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlcigpIHtcclxuICAgIGlmICh0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiAoKHRoaXMuaGlnaCA+Pj4gMCkgKiBUV09fUFdSXzMyX0RCTCkgKyAodGhpcy5sb3cgPj4+IDApO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHN0cmluZyB3cml0dGVuIGluIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggUmFkaXggKDItMzYpLCBkZWZhdWx0cyB0byAxMFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKiBAb3ZlcnJpZGVcclxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgYHJhZGl4YCBpcyBvdXQgb2YgcmFuZ2VcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkge1xyXG4gICAgcmFkaXggPSByYWRpeCB8fCAxMDtcclxuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcclxuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdyYWRpeCcpO1xyXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgeyAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBMb25nIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgbmVnYXRlZCwgc28gd2UgcmVtb3ZlXHJcbiAgICAgICAgICAgIC8vIHRoZSBib3R0b20tbW9zdCBkaWdpdCBpbiB0aGlzIGJhc2UgYW5kIHRoZW4gcmVjdXJzZSB0byBkbyB0aGUgcmVzdC5cclxuICAgICAgICAgICAgdmFyIHJhZGl4TG9uZyA9IGZyb21OdW1iZXIocmFkaXgpLFxyXG4gICAgICAgICAgICAgICAgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSxcclxuICAgICAgICAgICAgICAgIHJlbTEgPSBkaXYubXVsKHJhZGl4TG9uZykuc3ViKHRoaXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiAnLScgKyB0aGlzLm5lZygpLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSxcclxuICAgICAgICByZW0gPSB0aGlzO1xyXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLFxyXG4gICAgICAgICAgICBpbnR2YWwgPSByZW0uc3ViKHJlbURpdi5tdWwocmFkaXhUb1Bvd2VyKSkudG9JbnQoKSA+Pj4gMCxcclxuICAgICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgICAgICByZW0gPSByZW1EaXY7XHJcbiAgICAgICAgaWYgKHJlbS5pc1plcm8oKSlcclxuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gJzAnICsgZGlnaXRzO1xyXG4gICAgICAgICAgICByZXN1bHQgPSAnJyArIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBoaWdoIGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2g7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGhpZ2ggYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHMgPSBmdW5jdGlvbiBnZXRMb3dCaXRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxvdyA+Pj4gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5lcShNSU5fVkFMVUUpID8gNjQgOiB0aGlzLm5lZygpLmdldE51bUJpdHNBYnMoKTtcclxuICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xyXG4gICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKVxyXG4gICAgICAgIGlmICgodmFsICYgKDEgPDwgYml0KSkgIT0gMClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoICE9IDAgPyBiaXQgKyAzMyA6IGJpdCArIDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB6ZXJvLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2lzWmVyb30uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXogPSBMb25nUHJvdG90eXBlLmlzWmVybztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBuZWdhdGl2ZS5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgcG9zaXRpdmUuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIG9kZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZXZlbi5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHtcclxuICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZCAhPT0gb3RoZXIudW5zaWduZWQgJiYgKHRoaXMuaGlnaCA+Pj4gMzEpID09PSAxICYmIChvdGhlci5oaWdoID4+PiAzMSkgPT09IDEpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gb3RoZXIuaGlnaCAmJiB0aGlzLmxvdyA9PT0gb3RoZXIubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZXF1YWxzfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmVxID0gTG9uZ1Byb3RvdHlwZS5lcXVhbHM7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90RXF1YWxzID0gZnVuY3Rpb24gbm90RXF1YWxzKG90aGVyKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuZXEoLyogdmFsaWRhdGVzICovIG90aGVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZXEgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFscztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmxlc3NUaGFuID0gZnVuY3Rpb24gbGVzc1RoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdCA9IExvbmdQcm90b3R5cGUubGVzc1RoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsID0gZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPD0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIDEgaWYgdGhlIHRoaXMgaXMgZ3JlYXRlciBhbmQgLTFcclxuICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIGlmICh0aGlzLmVxKG90aGVyKSlcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXHJcbiAgICAgICAgb3RoZXJOZWcgPSBvdGhlci5pc05lZ2F0aXZlKCk7XHJcbiAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2lnbiBiaXRzIGFyZSB0aGUgc2FtZVxyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YihvdGhlcikuaXNOZWdhdGl2ZSgpID8gLTEgOiAxO1xyXG4gICAgLy8gQm90aCBhcmUgcG9zaXRpdmUgaWYgYXQgbGVhc3Qgb25lIGlzIHVuc2lnbmVkXHJcbiAgICByZXR1cm4gKG90aGVyLmhpZ2ggPj4+IDApID4gKHRoaXMuaGlnaCA+Pj4gMCkgfHwgKG90aGVyLmhpZ2ggPT09IHRoaXMuaGlnaCAmJiAob3RoZXIubG93ID4+PiAwKSA+ICh0aGlzLmxvdyA+Pj4gMCkpID8gLTEgOiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2NvbXBhcmV9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXHJcbiAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7XHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQgJiYgdGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICByZXR1cm4gdGhpcy5ub3QoKS5hZGQoT05FKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25lZ2F0ZX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWcgPSBMb25nUHJvdG90eXBlLm5lZ2F0ZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBTdW1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkge1xyXG4gICAgaWYgKCFpc0xvbmcoYWRkZW5kKSlcclxuICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cclxuXHJcbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcclxuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBiNDggPSBhZGRlbmQuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcclxuICAgIGMwMCArPSBhMDAgKyBiMDA7XHJcbiAgICBjMTYgKz0gYzAwID4+PiAxNjtcclxuICAgIGMwMCAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTE2ICsgYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiArIGIzMjtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGM0OCArPSBhNDggKyBiNDg7XHJcbiAgICBjNDggJj0gMHhGRkZGO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKChjMTYgPDwgMTYpIHwgYzAwLCAoYzQ4IDw8IDE2KSB8IGMzMiwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gc3VidHJhaGVuZCBTdWJ0cmFoZW5kXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcclxuICAgIGlmICghaXNMb25nKHN1YnRyYWhlbmQpKVxyXG4gICAgICAgIHN1YnRyYWhlbmQgPSBmcm9tVmFsdWUoc3VidHJhaGVuZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoc3VidHJhaGVuZC5uZWcoKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc3VidHJhY3R9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBEaWZmZXJlbmNlXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnN1YiA9IExvbmdQcm90b3R5cGUuc3VidHJhY3Q7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUHJvZHVjdFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcclxuICAgIGlmICh0aGlzLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpXHJcbiAgICAgICAgbXVsdGlwbGllciA9IGZyb21WYWx1ZShtdWx0aXBsaWVyKTtcclxuXHJcbiAgICAvLyB1c2Ugd2FzbSBzdXBwb3J0IGlmIHByZXNlbnRcclxuICAgIGlmICh3YXNtKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHdhc20ubXVsKHRoaXMubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyLmhpZ2gpO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuIFpFUk87XHJcbiAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBtdWx0aXBsaWVyLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPO1xyXG4gICAgaWYgKG11bHRpcGxpZXIuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICByZXR1cm4gdGhpcy5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTztcclxuXHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyKS5uZWcoKTtcclxuICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKG11bHRpcGxpZXIubmVnKCkpLm5lZygpO1xyXG5cclxuICAgIC8vIElmIGJvdGggbG9uZ3MgYXJlIHNtYWxsLCB1c2UgZmxvYXQgbXVsdGlwbGljYXRpb25cclxuICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpLCB0aGlzLnVuc2lnbmVkKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBsb25nIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gYWRkIHVwIDR4NCBwcm9kdWN0cy5cclxuICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXHJcblxyXG4gICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcclxuICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYjQ4ID0gbXVsdGlwbGllci5oaWdoID4+PiAxNjtcclxuICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xyXG4gICAgYzAwICs9IGEwMCAqIGIwMDtcclxuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xyXG4gICAgYzAwICY9IDB4RkZGRjtcclxuICAgIGMxNiArPSBhMTYgKiBiMDA7XHJcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcclxuICAgIGMxNiAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTAwICogYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiAqIGIwMDtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMTYgKiBiMTY7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTAwICogYjMyO1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODtcclxuICAgIGM0OCAmPSAweEZGRkY7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtdWx0aXBseX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG11bHRpcGxpZXIgTXVsdGlwbGllclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFByb2R1Y3RcclxuICovXHJcbkxvbmdQcm90b3R5cGUubXVsID0gTG9uZ1Byb3RvdHlwZS5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoZSByZXN1bHQgaXMgc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyBzaWduZWQgb3JcclxuICogIHVuc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyB1bnNpZ25lZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBRdW90aWVudFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiBkaXZpZGUoZGl2aXNvcikge1xyXG4gICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpXHJcbiAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTtcclxuICAgIGlmIChkaXZpc29yLmlzWmVybygpKVxyXG4gICAgICAgIHRocm93IEVycm9yKCdkaXZpc2lvbiBieSB6ZXJvJyk7XHJcblxyXG4gICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XHJcbiAgICBpZiAod2FzbSkge1xyXG4gICAgICAgIC8vIGd1YXJkIGFnYWluc3Qgc2lnbmVkIGRpdmlzaW9uIG92ZXJmbG93OiB0aGUgbGFyZ2VzdFxyXG4gICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciAvIC0xIHdvdWxkIGJlIDEgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3RcclxuICAgICAgICAvLyBwb3NpdGl2ZSBudW1iZXIsIGR1ZSB0byB0d28ncyBjb21wbGVtZW50LlxyXG4gICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmhpZ2ggPT09IC0weDgwMDAwMDAwICYmXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93ID09PSAtMSAmJiBkaXZpc29yLmhpZ2ggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgd2l0aCBub24td2FzbSBjb2RlIHBhdGhcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20uZGl2X3UgOiB3YXNtLmRpdl9zKShcclxuICAgICAgICAgICAgdGhpcy5sb3csXHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCxcclxuICAgICAgICAgICAgZGl2aXNvci5sb3csXHJcbiAgICAgICAgICAgIGRpdmlzb3IuaGlnaFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIHZhciBhcHByb3gsIHJlbSwgcmVzO1xyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKSB7XHJcbiAgICAgICAgLy8gVGhpcyBzZWN0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHNpZ25lZCBsb25ncyBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZVxyXG4gICAgICAgIC8vIGNsb3N1cmUgbGlicmFyeSBhcyBhIHdob2xlLlxyXG4gICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsgIC8vIHJlY2FsbCB0aGF0IC1NSU5fVkFMVUUgPT0gTUlOX1ZBTFVFXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBPTkU7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhbGZUaGlzID0gdGhpcy5zaHIoMSk7XHJcbiAgICAgICAgICAgICAgICBhcHByb3ggPSBoYWxmVGhpcy5kaXYoZGl2aXNvcikuc2hsKDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbSA9IHRoaXMuc3ViKGRpdmlzb3IubXVsKGFwcHJveCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGFwcHJveC5hZGQocmVtLmRpdihkaXZpc29yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2KGRpdmlzb3IubmVnKCkpLm5lZygpO1xyXG4gICAgICAgIHJlcyA9IFpFUk87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRoZSBhbGdvcml0aG0gYmVsb3cgaGFzIG5vdCBiZWVuIG1hZGUgZm9yIHVuc2lnbmVkIGxvbmdzLiBJdCdzIHRoZXJlZm9yZVxyXG4gICAgICAgIC8vIHJlcXVpcmVkIHRvIHRha2Ugc3BlY2lhbCBjYXJlIG9mIHRoZSBNU0IgcHJpb3IgdG8gcnVubmluZyBpdC5cclxuICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpXHJcbiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTtcclxuICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzKSlcclxuICAgICAgICAgICAgcmV0dXJuIFVaRVJPO1xyXG4gICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMuc2hydSgxKSkpIC8vIDE1ID4+PiAxID0gNyA7IHdpdGggZGl2aXNvciA9IDggOyB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBVT05FO1xyXG4gICAgICAgIHJlcyA9IFVaRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXHJcbiAgICAvLyBmbG9hdGluZy1wb2ludCB0aGF0IGFwcHJveGltYXRlcyByZW1haW5kZXIgLyBvdGhlciAqZnJvbSBiZWxvdyosIGFkZCB0aGlzXHJcbiAgICAvLyBpbnRvIHRoZSByZXN1bHQsIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSByZW1haW5kZXIuICBJdCBpcyBjcml0aWNhbCB0aGF0XHJcbiAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXHJcbiAgICAvLyByZW1haW5kZXIgbmV2ZXIgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgIHJlbSA9IHRoaXM7XHJcbiAgICB3aGlsZSAocmVtLmd0ZShkaXZpc29yKSkge1xyXG4gICAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcclxuICAgICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGFjdHVhbCB2YWx1ZS5cclxuICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7XHJcblxyXG4gICAgICAgIC8vIFdlIHdpbGwgdHdlYWsgdGhlIGFwcHJveGltYXRlIHJlc3VsdCBieSBjaGFuZ2luZyBpdCBpbiB0aGUgNDgtdGggZGlnaXQgb3JcclxuICAgICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXHJcbiAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSxcclxuICAgICAgICAgICAgZGVsdGEgPSAobG9nMiA8PSA0OCkgPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLFxyXG5cclxuICAgICAgICAvLyBEZWNyZWFzZSB0aGUgYXBwcm94aW1hdGlvbiB1bnRpbCBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlbWFpbmRlci4gIE5vdGVcclxuICAgICAgICAvLyB0aGF0IGlmIGl0IGlzIHRvbyBsYXJnZSwgdGhlIHByb2R1Y3Qgb3ZlcmZsb3dzIGFuZCBpcyBuZWdhdGl2ZS5cclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gpLFxyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ndChyZW0pKSB7XHJcbiAgICAgICAgICAgIGFwcHJveCAtPSBkZWx0YTtcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXHJcbiAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9uIHNpbmNlIHdlIHdvdWxkIG1ha2Ugbm8gcHJvZ3Jlc3MuXHJcbiAgICAgICAgaWYgKGFwcHJveFJlcy5pc1plcm8oKSlcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gT05FO1xyXG5cclxuICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XHJcbiAgICAgICAgcmVtID0gcmVtLnN1YihhcHByb3hSZW0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZGl2aWRlfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUXVvdGllbnRcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZGl2ID0gTG9uZ1Byb3RvdHlwZS5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZHVsbyA9IGZ1bmN0aW9uIG1vZHVsbyhkaXZpc29yKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSlcclxuICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpO1xyXG5cclxuICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxyXG4gICAgaWYgKHdhc20pIHtcclxuICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLnJlbV91IDogd2FzbS5yZW1fcykoXHJcbiAgICAgICAgICAgIHRoaXMubG93LFxyXG4gICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93LFxyXG4gICAgICAgICAgICBkaXZpc29yLmhpZ2hcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbW9kdWxvfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZCA9IExvbmdQcm90b3R5cGUubW9kdWxvO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIG1vZHVsbyB0aGUgc3BlY2lmaWVkLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI21vZHVsb30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5yZW0gPSBMb25nUHJvdG90eXBlLm1vZHVsbztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgT1Igb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGlzIExvbmcgYW5kIHRoZSBnaXZlbiBvbmUuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcihvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyBeIG90aGVyLmxvdywgdGhpcy5oaWdoIF4gb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsICh0aGlzLmhpZ2ggPDwgbnVtQml0cykgfCAodGhpcy5sb3cgPj4+ICgzMiAtIG51bUJpdHMpKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKDAsIHRoaXMubG93IDw8IChudW1CaXRzIC0gMzIpLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgc2hpZnRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0TGVmdH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgYXJpdGhtZXRpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykge1xyXG4gICAgaWYgKGlzTG9uZyhudW1CaXRzKSlcclxuICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xyXG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMoKHRoaXMubG93ID4+PiBudW1CaXRzKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbnVtQml0cykpLCB0aGlzLmhpZ2ggPj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hyID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBsb2dpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkID0gZnVuY3Rpb24gc2hpZnRSaWdodFVuc2lnbmVkKG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIG51bUJpdHMgJj0gNjM7XHJcbiAgICBpZiAobnVtQml0cyA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoO1xyXG4gICAgICAgIGlmIChudW1CaXRzIDwgMzIpIHtcclxuICAgICAgICAgICAgdmFyIGxvdyA9IHRoaXMubG93O1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoKGxvdyA+Pj4gbnVtQml0cykgfCAoaGlnaCA8PCAoMzIgLSBudW1CaXRzKSksIGhpZ2ggPj4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobnVtQml0cyA9PT0gMzIpXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoLCAwLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiAobnVtQml0cyAtIDMyKSwgMCwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJfdSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBzaWduZWQuXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHtcclxuICAgIGlmICghdGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIHVuc2lnbmVkLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFVuc2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGxlIFdoZXRoZXIgbGl0dGxlIG9yIGJpZyBlbmRpYW4sIGRlZmF1bHRzIHRvIGJpZyBlbmRpYW5cclxuICogQHJldHVybnMgeyFBcnJheS48bnVtYmVyPn0gQnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcyhsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gdGhpcy50b0J5dGVzTEUoKSA6IHRoaXMudG9CeXRlc0JFKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBsaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgbG8gICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSAgICAgICAgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gMjRcclxuICAgIF07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBiaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzQkUgPSBmdW5jdGlvbiB0b0J5dGVzQkUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaGkgPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gMjQgICAgICAgLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBsbyAgICAgICAgJiAweGZmXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBieXRlcyBCeXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtib29sZWFuPX0gbGUgV2hldGhlciBsaXR0bGUgb3IgYmlnIGVuZGlhbiwgZGVmYXVsdHMgdG8gYmlnIGVuZGlhblxyXG4gKiBAcmV0dXJucyB7TG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMoYnl0ZXMsIHVuc2lnbmVkLCBsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gTG9uZy5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZy5mcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGxpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGJ5dGVzIExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CeXRlc0xFID0gZnVuY3Rpb24gZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcoXHJcbiAgICAgICAgYnl0ZXNbMF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzFdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1syXSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbM10gPDwgMjQsXHJcbiAgICAgICAgYnl0ZXNbNF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzVdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s2XSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbN10gPDwgMjQsXHJcbiAgICAgICAgdW5zaWduZWRcclxuICAgICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgYmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHtcclxuICAgIHJldHVybiBuZXcgTG9uZyhcclxuICAgICAgICBieXRlc1s0XSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbNV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzZdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s3XSxcclxuICAgICAgICBieXRlc1swXSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbMV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzJdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1szXSxcclxuICAgICAgICB1bnNpZ25lZFxyXG4gICAgKTtcclxufTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yMyB7XG4gIHI6IG51bWJlclxuICBnOiBudW1iZXJcbiAgYjogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2xvcjMoKTogQ29sb3IzIHtcbiAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENvbG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5iICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLmIpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2xvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvbG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuYiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IExvbmcgZnJvbSAnbG9uZydcbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhclNoYXBlIHtcbiAgaWQ6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IE5QQyAqL1xuICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gdXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VGZW1hbGUgKi9cbiAgYm9keVNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gQ29sb3IzKFIgPSAwLjZmLCBHID0gMC40NjJmLCBCID0gMC4zNTZmKSAqL1xuICBza2luQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuMjgzZiwgRyA9IDAuMTQyZiwgQiA9IDBmKSAqL1xuICBoYWlyQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuNmYsIEcgPSAwLjQ2MmYsIEIgPSAwLjM1NmYpICovXG4gIGV5ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIGV4cHJlc3Npb25UcmlnZ2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSB0aW1lc3RhbXAgKi9cbiAgZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXA/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGFsa2luZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIGRlZmF1bHQgPSBbXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9leWVzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZWJyb3dzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX21vdXRoXzAwXCJcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnN0YW5kYXJkX2hhaXJcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfc2ltcGxlX3llbGxvd190c2hpcnRcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfYnJvd25fdHJvdXNlcnNcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmJ1bl9zaG9lc1wiXVxuICAgKi9cbiAgd2VhcmFibGVzOiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJTaGFwZSgpOiBQQkF2YXRhclNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGJvZHlTaGFwZTogdW5kZWZpbmVkLFxuICAgIHNraW5Db2xvcjogdW5kZWZpbmVkLFxuICAgIGhhaXJDb2xvcjogdW5kZWZpbmVkLFxuICAgIGV5ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgZXhwcmVzc2lvblRyaWdnZXJJZDogdW5kZWZpbmVkLFxuICAgIGV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gICAgdGFsa2luZzogdW5kZWZpbmVkLFxuICAgIHdlYXJhYmxlczogW11cbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuaWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UubmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9keVNoYXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmJvZHlTaGFwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2tpbkNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5za2luQ29sb3IsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGFpckNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5oYWlyQ29sb3IsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXllQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmV5ZUNvbG9yLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2NCkuaW50NjQobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGFsa2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5ib29sKG1lc3NhZ2UudGFsa2luZylcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uud2VhcmFibGVzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcodiEpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhclNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5ib2R5U2hhcGUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5za2luQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmhhaXJDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZXllQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRhbGtpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLndlYXJhYmxlcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZGVjbGFyZSB2YXIgc2VsZjogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueSB8IHVuZGVmaW5lZFxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnkgfCB1bmRlZmluZWRcbnZhciBnbG9iYWxUaGlzOiBhbnkgPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsVGhpc1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZlxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3dcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsXG4gIHRocm93ICdVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnXG59KSgpXG5cbmZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKTogbnVtYmVyIHtcbiAgaWYgKGxvbmcuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoJ1ZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSJylcbiAgfVxuICByZXR1cm4gbG9uZy50b051bWJlcigpXG59XG5cbmlmIChfbTAudXRpbC5Mb25nICE9PSBMb25nKSB7XG4gIF9tMC51dGlsLkxvbmcgPSBMb25nIGFzIGFueVxuICBfbTAuY29uZmlndXJlKClcbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdmF0YXJTaGFwZSB9IGZyb20gJy4vcGIvQXZhdGFyU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA4MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJBdmF0YXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXZhdGFyU2hhcGUge1xuICAgIHJldHVybiBQQkF2YXRhclNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXZhdGFyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkJpbGxib2FyZCB7XG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgeD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB5PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHo/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJpbGxib2FyZCgpOiBQQkJpbGxib2FyZCB7XG4gIHJldHVybiB7IHg6IHVuZGVmaW5lZCwgeTogdW5kZWZpbmVkLCB6OiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkJpbGxib2FyZCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQmlsbGJvYXJkLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS55KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS56ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS56KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJCaWxsYm9hcmQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQmlsbGJvYXJkKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS54ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UueiA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJCaWxsYm9hcmQgfSBmcm9tICcuL3BiL0JpbGxib2FyZC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDkwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmRTY2hlbWE6IElTY2hlbWE8UEJCaWxsYm9hcmQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQmlsbGJvYXJkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJCaWxsYm9hcmQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQmlsbGJvYXJkIHtcbiAgICByZXR1cm4gUEJCaWxsYm9hcmQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkJpbGxib2FyZCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQmlsbGJvYXJkLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJCb3hTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJveFNoYXBlKCk6IFBCQm94U2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQm94U2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkJveFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkJveFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkJveFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQm94U2hhcGUgfSBmcm9tICcuL3BiL0JveFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQm94U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQm94U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkJveFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkJveFNoYXBlIHtcbiAgICByZXR1cm4gUEJCb3hTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQm94U2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ2FtZXJhTW9kZVZhbHVlIH0gZnJvbSAnLi9jb21tb24vQ2FtZXJhTW9kZVZhbHVlLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ2FtZXJhTW9kZSB7XG4gIG1vZGU6IENhbWVyYU1vZGVWYWx1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKCk6IFBCQ2FtZXJhTW9kZSB7XG4gIHJldHVybiB7IG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkNhbWVyYU1vZGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tb2RlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZSB9IGZyb20gJy4vcGIvQ2FtZXJhTW9kZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDcyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDYW1lcmFNb2RlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDYW1lcmFNb2RlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGUge1xuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkNhbWVyYU1vZGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDYW1lcmFNb2RlVmFsdWUgfSBmcm9tICcuL2NvbW1vbi9DYW1lcmFNb2RlVmFsdWUuZ2VuJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDYW1lcmFNb2RlQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbW9kZTogQ2FtZXJhTW9kZVZhbHVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGVBcmVhKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICByZXR1cm4geyBhcmVhOiB1bmRlZmluZWQsIG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGVBcmVhID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDYW1lcmFNb2RlQXJlYSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFyZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5hcmVhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1vZGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZUFyZWEoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmFyZWEgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZUFyZWEgfSBmcm9tICcuL3BiL0NhbWVyYU1vZGVBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZUFyZWE+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ2FtZXJhTW9kZUFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkNhbWVyYU1vZGVBcmVhLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGVBcmVhLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDeWxpbmRlclNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDeWxpbmRlclNoYXBlKCk6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCxcbiAgICBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIHJhZGl1c1RvcDogdW5kZWZpbmVkLFxuICAgIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDeWxpbmRlclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDeWxpbmRlclNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLnJhZGl1c1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UucmFkaXVzQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ3lsaW5kZXJTaGFwZSB9IGZyb20gJy4vcGIvQ3lsaW5kZXJTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE2XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQ3lsaW5kZXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDeWxpbmRlclNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDeWxpbmRlclNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkdMVEZTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJHTFRGU2hhcGUoKTogUEJHTFRGU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgc3JjOiAnJyB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCR0xURlNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJHTFRGU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJHTFRGU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCR0xURlNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCR0xURlNoYXBlIH0gZnJvbSAnLi9wYi9HTFRGU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCR0xURlNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkdMVEZTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCR0xURlNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkdMVEZTaGFwZSB7XG4gICAgcmV0dXJuIFBCR0xURlNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJHTFRGU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkdMVEZTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gVGV4dHVyZVdyYXBNb2RlIHtcbiAgUmVwZWF0ID0gMCxcbiAgQ2xhbXAgPSAxLFxuICBNaXJyb3IgPSAyLFxuICBNaXJyb3JPbmNlID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gRmlsdGVyTW9kZSB7XG4gIFBvaW50ID0gMCxcbiAgQmlsaW5lYXIgPSAxLFxuICBUcmlsaW5lYXIgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBUcmFuc3BhcmVuY3lNb2RlIHtcbiAgT3BhcXVlID0gMCxcbiAgQWxwaGFUZXN0ID0gMSxcbiAgQWxwaGFCbGVuZCA9IDIsXG4gIEFscGhhVGVzdEFuZEFscGhhQmxlbmQgPSAzLFxuICBBdXRvID0gNCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsIHtcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIHRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAwLjUuIHJhbmdlIHZhbHVlOiBmcm9tIDAgdG8gMSAqL1xuICBhbHBoYVRlc3Q/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAgdHJ1ZSAqL1xuICBjYXN0U2hhZG93cz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIGFscGhhVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgZW1pc3NpdmVUZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICBidW1wVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IHdoaXRlOyAqL1xuICBhbGJlZG9Db2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IGJsYWNrOyAqL1xuICBlbWlzc2l2ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gd2hpdGU7ICovXG4gIHJlZmxlY3Rpdml0eUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gVHJhbnNwYXJlbmN5TW9kZS5BdXRvICovXG4gIHRyYW5zcGFyZW5jeU1vZGU/OiBUcmFuc3BhcmVuY3lNb2RlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIG1ldGFsbGljPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIHJvdWdobmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgZ2xvc3NpbmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgc3BlY3VsYXJJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAyICovXG4gIGVtaXNzaXZlSW50ZW5zaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMSAqL1xuICBkaXJlY3RJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsX1RleHR1cmUge1xuICBzcmM6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IFRleHR1cmVXcmFwTW9kZS5DbGFtcCAqL1xuICB3cmFwTW9kZT86IFRleHR1cmVXcmFwTW9kZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IEZpbHRlck1vZGUuQmlsaW5lYXIgKi9cbiAgZmlsdGVyTW9kZT86IEZpbHRlck1vZGUgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWF0ZXJpYWwoKTogUEJNYXRlcmlhbCB7XG4gIHJldHVybiB7XG4gICAgdGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGFscGhhVGVzdDogdW5kZWZpbmVkLFxuICAgIGNhc3RTaGFkb3dzOiB1bmRlZmluZWQsXG4gICAgYWxwaGFUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgZW1pc3NpdmVUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgYnVtcFRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBhbGJlZG9Db2xvcjogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlQ29sb3I6IHVuZGVmaW5lZCxcbiAgICByZWZsZWN0aXZpdHlDb2xvcjogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW5jeU1vZGU6IHVuZGVmaW5lZCxcbiAgICBtZXRhbGxpYzogdW5kZWZpbmVkLFxuICAgIHJvdWdobmVzczogdW5kZWZpbmVkLFxuICAgIGdsb3NzaW5lc3M6IHVuZGVmaW5lZCxcbiAgICBzcGVjdWxhckludGVuc2l0eTogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlSW50ZW5zaXR5OiB1bmRlZmluZWQsXG4gICAgZGlyZWN0SW50ZW5zaXR5OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1hdGVyaWFsID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLnRleHR1cmUsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxwaGFUZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UuYWxwaGFUZXN0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jYXN0U2hhZG93cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuY2FzdFNoYWRvd3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFscGhhVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuYWxwaGFUZXh0dXJlLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVUZXh0dXJlLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJ1bXBUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS5idW1wVGV4dHVyZSwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGJlZG9Db2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuYWxiZWRvQ29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciwgd3JpdGVyLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UucmVmbGVjdGl2aXR5Q29sb3IsIHdyaXRlci51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHJhbnNwYXJlbmN5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1ldGFsbGljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTMpLmZsb2F0KG1lc3NhZ2UubWV0YWxsaWMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwMSkuZmxvYXQobWVzc2FnZS5yb3VnaG5lc3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdsb3NzaW5lc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDkpLmZsb2F0KG1lc3NhZ2UuZ2xvc3NpbmVzcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3RJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzMpLmZsb2F0KG1lc3NhZ2UuZGlyZWN0SW50ZW5zaXR5KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNYXRlcmlhbCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYWxwaGFUZXN0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5jYXN0U2hhZG93cyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbHBoYVRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuYnVtcFRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmFsYmVkb0NvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UubWV0YWxsaWMgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5yb3VnaG5lc3MgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5nbG9zc2luZXNzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdEludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1hdGVyaWFsX1RleHR1cmUoKTogUEJNYXRlcmlhbF9UZXh0dXJlIHtcbiAgcmV0dXJuIHsgc3JjOiAnJywgd3JhcE1vZGU6IHVuZGVmaW5lZCwgZmlsdGVyTW9kZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNYXRlcmlhbF9UZXh0dXJlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbF9UZXh0dXJlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53cmFwTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLndyYXBNb2RlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5maWx0ZXJNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UuZmlsdGVyTW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWF0ZXJpYWxfVGV4dHVyZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbF9UZXh0dXJlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS53cmFwTW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmZpbHRlck1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJNYXRlcmlhbCB9IGZyb20gJy4vcGIvTWF0ZXJpYWwuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxN1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWF0ZXJpYWxTY2hlbWE6IElTY2hlbWE8UEJNYXRlcmlhbD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNYXRlcmlhbCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTWF0ZXJpYWwuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCTWF0ZXJpYWwge1xuICAgIHJldHVybiBQQk1hdGVyaWFsLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJNYXRlcmlhbCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCTWF0ZXJpYWwuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29sbGlkZXJMYXllciB7XG4gIE5vbmUgPSAwLFxuICBQb2ludGVyID0gMSxcbiAgUGh5c2ljcyA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXIge1xuICAvKiogZGVmYXVsdCA9IENvbGxpZGVyTGF5ZXIuUGh5c2ljcyB8IENvbGxpZGVyTGF5ZXIuUG9pbnRlciAqL1xuICBjb2xsaXNpb25NYXNrPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGJveDogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB7XG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge31cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgcmV0dXJuIHsgY29sbGlzaW9uTWFzazogdW5kZWZpbmVkLCBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaENvbGxpZGVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY29sbGlzaW9uTWFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuY29sbGlzaW9uTWFzaylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaENvbGxpZGVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmNvbGxpc2lvbk1hc2sgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaENvbGxpZGVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoKCk6IFBCTWVzaENvbGxpZGVyX0JveE1lc2gge1xuICByZXR1cm4ge31cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaENvbGxpZGVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoKCk6IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7fVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hDb2xsaWRlciB9IGZyb20gJy4vcGIvTWVzaENvbGxpZGVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTlcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hDb2xsaWRlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoQ29sbGlkZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hDb2xsaWRlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoQ29sbGlkZXIge1xuICAgIHJldHVybiBQQk1lc2hDb2xsaWRlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoQ29sbGlkZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlciB7XG4gIGJveDogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gIHV2czogbnVtYmVyW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNCb3R0b20/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gge1xuICB1dnM6IG51bWJlcltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB7fVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKTogUEJNZXNoUmVuZGVyZXIge1xuICByZXR1cm4geyBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gge1xuICByZXR1cm4geyB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7IHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hSZW5kZXJlciB9IGZyb20gJy4vcGIvTWVzaFJlbmRlcmVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMThcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hSZW5kZXJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoUmVuZGVyZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hSZW5kZXJlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoUmVuZGVyZXIge1xuICAgIHJldHVybiBQQk1lc2hSZW5kZXJlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaFJlbmRlcmVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoUmVuZGVyZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJORlRTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xuICBhc3NldElkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHN0eWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk5GVFNoYXBlKCk6IFBCTkZUU2hhcGUge1xuICByZXR1cm4ge1xuICAgIHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsXG4gICAgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICBzcmM6ICcnLFxuICAgIGFzc2V0SWQ6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk5GVFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJORlRTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcmMgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS5zcmMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFzc2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXNzZXRJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5zdHlsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmNvbG9yLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk5GVFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk5GVFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuYXNzZXRJZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnN0eWxlID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5jb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTkZUU2hhcGUgfSBmcm9tICcuL3BiL05GVFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE5GVFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCTkZUU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTkZUU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk5GVFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk5GVFNoYXBlIHtcbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTkZUU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyRG93biB7XG4gIC8qKiBkZWZhdWx0PUFjdGlvbkJ1dHRvbi5BTlkgKi9cbiAgYnV0dG9uPzogQWN0aW9uQnV0dG9uIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdJbnRlcmFjdCcgKi9cbiAgaG92ZXJUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIG1heERpc3RhbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgc2hvd0ZlZWRiYWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duKCk6IFBCT25Qb2ludGVyRG93biB7XG4gIHJldHVybiB7IGJ1dHRvbjogdW5kZWZpbmVkLCBob3ZlclRleHQ6IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IHVuZGVmaW5lZCwgc2hvd0ZlZWRiYWNrOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlckRvd24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93bigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaG92ZXJUZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWF4RGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNob3dGZWVkYmFjayA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25TY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd24sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd24uZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93biB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93biB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICBidXR0b246IEFjdGlvbkJ1dHRvblxuICBtZXNoTmFtZTogc3RyaW5nXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgcG9pbnQ6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpc3RhbmNlOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93blJlc3VsdCgpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd25SZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXNoTmFtZSAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLm1lc2hOYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9pbnQsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uubm9ybWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uubm9ybWFsLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3RhbmNlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY5KS5mbG9hdChtZXNzYWdlLmRpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50aW1lc3RhbXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd25SZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1lc2hOYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uub3JpZ2luID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0aW9uID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UucG9pbnQgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5ub3JtYWwgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5kaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duUmVzdWx0IH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjZcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duUmVzdWx0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd25SZXN1bHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwIHtcbiAgLyoqIGRlZmF1bHQ9QWN0aW9uQnV0dG9uLkFOWSAqL1xuICBidXR0b24/OiBBY3Rpb25CdXR0b24gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J0ludGVyYWN0JyAqL1xuICBob3ZlclRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgbWF4RGlzdGFuY2U/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBzaG93RmVlZGJhY2s/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKCk6IFBCT25Qb2ludGVyVXAge1xuICByZXR1cm4geyBidXR0b246IHVuZGVmaW5lZCwgaG92ZXJUZXh0OiB1bmRlZmluZWQsIG1heERpc3RhbmNlOiB1bmRlZmluZWQsIHNob3dGZWVkYmFjazogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJVcCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyVXAsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5ob3ZlclRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tYXhEaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlclVwIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJVcC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDYxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlclVwPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlclVwLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJVcC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJVcCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXAuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlclVwIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgbWVzaE5hbWU6IHN0cmluZ1xuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIHBvaW50OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG5vcm1hbDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXN0YW5jZTogbnVtYmVyXG4gIHRpbWVzdGFtcDogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlclVwUmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJVcFJlc3VsdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc2hOYW1lICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm9yaWdpbiwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5kaXJlY3Rpb24sIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5wb2ludCwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWwsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlzdGFuY2UgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjkpLmZsb2F0KG1lc3NhZ2UuZGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS50aW1lc3RhbXApXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tZXNoTmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uubm9ybWFsID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRpbWVzdGFtcCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyVXBSZXN1bHQgfSBmcm9tICcuL3BiL09uUG9pbnRlclVwUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjVcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyVXBSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyVXBSZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlclVwUmVzdWx0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcFJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlclVwUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQbGFuZVNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHV2czogbnVtYmVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUGxhbmVTaGFwZSgpOiBQQlBsYW5lU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUGxhbmVTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUGxhbmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDM0KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQbGFuZVNoYXBlIH0gZnJvbSAnLi9wYi9QbGFuZVNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJQbGFuZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBsYW5lU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBsYW5lU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUGxhbmVTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCUG9pbnRlckxvY2sge1xuICBpc1BvaW50ZXJMb2NrZWQ6IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUG9pbnRlckxvY2soKTogUEJQb2ludGVyTG9jayB7XG4gIHJldHVybiB7IGlzUG9pbnRlckxvY2tlZDogZmFsc2UgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBvaW50ZXJMb2NrID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQb2ludGVyTG9jaywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckxvY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyTG9jayB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQb2ludGVyTG9jaygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBvaW50ZXJMb2NrIH0gZnJvbSAnLi9wYi9Qb2ludGVyTG9jay5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDc0XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQb2ludGVyTG9ja1NjaGVtYTogSVNjaGVtYTxQQlBvaW50ZXJMb2NrPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBvaW50ZXJMb2NrLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJQb2ludGVyTG9jay5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQb2ludGVyTG9jayB7XG4gICAgcmV0dXJuIFBCUG9pbnRlckxvY2suZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQb2ludGVyTG9jay5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCU3BoZXJlU2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCU3BoZXJlU2hhcGUoKTogUEJTcGhlcmVTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCwgdmlzaWJsZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJTcGhlcmVTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCU3BoZXJlU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCU3BoZXJlU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCU3BoZXJlU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJTcGhlcmVTaGFwZSB9IGZyb20gJy4vcGIvU3BoZXJlU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgU3BoZXJlU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJTcGhlcmVTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJTcGhlcmVTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCU3BoZXJlU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCU3BoZXJlU2hhcGUge1xuICAgIHJldHVybiBQQlNwaGVyZVNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJUZXh0U2hhcGUge1xuICB0ZXh0OiBzdHJpbmdcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGZvbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICBvcGFjaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIGZvbnRTaXplPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGZvbnRBdXRvU2l6ZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J2NlbnRlcicgKi9cbiAgaFRleHRBbGlnbj86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nY2VudGVyJyAqL1xuICB2VGV4dEFsaWduPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEgKi9cbiAgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MSAqL1xuICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcGFkZGluZ1RvcD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nUmlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcGFkZGluZ0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nTGVmdD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBsaW5lU3BhY2luZz86IG51bWJlciB8IHVuZGVmaW5lZFxuICBsaW5lQ291bnQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGV4dFdyYXBwaW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzaGFkb3dCbHVyPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHNoYWRvd09mZnNldFg/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgc2hhZG93T2Zmc2V0WT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBvdXRsaW5lV2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9KDEuMCwxLjAsMS4wKSAqL1xuICBzaGFkb3dDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIG91dGxpbmVDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIHRleHRDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJUZXh0U2hhcGUoKTogUEJUZXh0U2hhcGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6ICcnLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICBmb250OiB1bmRlZmluZWQsXG4gICAgb3BhY2l0eTogdW5kZWZpbmVkLFxuICAgIGZvbnRTaXplOiB1bmRlZmluZWQsXG4gICAgZm9udEF1dG9TaXplOiB1bmRlZmluZWQsXG4gICAgaFRleHRBbGlnbjogdW5kZWZpbmVkLFxuICAgIHZUZXh0QWxpZ246IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdUb3A6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nUmlnaHQ6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nQm90dG9tOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ0xlZnQ6IHVuZGVmaW5lZCxcbiAgICBsaW5lU3BhY2luZzogdW5kZWZpbmVkLFxuICAgIGxpbmVDb3VudDogdW5kZWZpbmVkLFxuICAgIHRleHRXcmFwcGluZzogdW5kZWZpbmVkLFxuICAgIHNoYWRvd0JsdXI6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dPZmZzZXRYOiB1bmRlZmluZWQsXG4gICAgc2hhZG93T2Zmc2V0WTogdW5kZWZpbmVkLFxuICAgIG91dGxpbmVXaWR0aDogdW5kZWZpbmVkLFxuICAgIHNoYWRvd0NvbG9yOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgdGV4dENvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlRleHRTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVGV4dFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGV4dCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuZm9udClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLm9wYWNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UuZm9udFNpemUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnRBdXRvU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5ib29sKG1lc3NhZ2UuZm9udEF1dG9TaXplKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oVGV4dEFsaWduICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLnN0cmluZyhtZXNzYWdlLmhUZXh0QWxpZ24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZUZXh0QWxpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2Nikuc3RyaW5nKG1lc3NhZ2UudlRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3NykuZmxvYXQobWVzc2FnZS53aWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODUpLmZsb2F0KG1lc3NhZ2UuaGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTMpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ1JpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTAxKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdSaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0JvdHRvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwOSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDExNykuZmxvYXQobWVzc2FnZS5wYWRkaW5nTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZVNwYWNpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjUpLmZsb2F0KG1lc3NhZ2UubGluZVNwYWNpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxpbmVDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuaW50MzIobWVzc2FnZS5saW5lQ291bnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRleHRXcmFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuYm9vbChtZXNzYWdlLnRleHRXcmFwcGluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE0OSkuZmxvYXQobWVzc2FnZS5zaGFkb3dCbHVyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dPZmZzZXRYICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTU3KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNjUpLmZsb2F0KG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3V0bGluZVdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTczKS5mbG9hdChtZXNzYWdlLm91dGxpbmVXaWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnNoYWRvd0NvbG9yLCB3cml0ZXIudWludDMyKDE3OCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdXRsaW5lQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLm91dGxpbmVDb2xvciwgd3JpdGVyLnVpbnQzMigxODYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dENvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS50ZXh0Q29sb3IsIHdyaXRlci51aW50MzIoMTk0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlRleHRTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJUZXh0U2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmZvbnQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5vcGFjaXR5ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5mb250U2l6ZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZm9udEF1dG9TaXplID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmhUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS52VGV4dEFsaWduID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2Uud2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS5oZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1JpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdMZWZ0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG1lc3NhZ2UubGluZVNwYWNpbmcgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgbWVzc2FnZS5saW5lQ291bnQgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0V3JhcHBpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd0JsdXIgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRYID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICBtZXNzYWdlLm91dGxpbmVXaWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd0NvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIG1lc3NhZ2UudGV4dENvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJUZXh0U2hhcGUgfSBmcm9tICcuL3BiL1RleHRTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDMwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0U2hhcGVTY2hlbWE6IElTY2hlbWE8UEJUZXh0U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVGV4dFNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJUZXh0U2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVGV4dFNoYXBlIHtcbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlRleHRTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVGV4dFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVWlUZXh0IHtcbiAgdGV4dDogc3RyaW5nXG4gIHRleHRDb2xvcjogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlVpVGV4dCgpOiBQQlVpVGV4dCB7XG4gIHJldHVybiB7IHRleHQ6ICcnLCB0ZXh0Q29sb3I6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVWlUZXh0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJVaVRleHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS50ZXh0ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UudGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dENvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS50ZXh0Q29sb3IsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVWlUZXh0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlVpVGV4dCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnRleHRDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVWlUZXh0IH0gZnJvbSAnLi9wYi9VaVRleHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA1MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVWlUZXh0U2NoZW1hOiBJU2NoZW1hPFBCVWlUZXh0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlVpVGV4dCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCVWlUZXh0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlVpVGV4dCB7XG4gICAgcmV0dXJuIFBCVWlUZXh0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJVaVRleHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlVpVGV4dC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVmlzaWJpbGl0eUNvbXBvbmVudCgpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICByZXR1cm4geyB2aXNpYmxlOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlZpc2liaWxpdHlDb21wb25lbnQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlZpc2liaWxpdHlDb21wb25lbnQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVmlzaWJpbGl0eUNvbXBvbmVudCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJWaXNpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi9wYi9WaXNpYmlsaXR5Q29tcG9uZW50LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwODFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnRTY2hlbWE6IElTY2hlbWE8UEJWaXNpYmlsaXR5Q29tcG9uZW50PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlZpc2liaWxpdHlDb21wb25lbnQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlZpc2liaWxpdHlDb21wb25lbnQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIFBCVmlzaWJpbGl0eUNvbXBvbmVudC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVmlzaWJpbGl0eUNvbXBvbmVudC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJ1xuaW1wb3J0ICogYXMgVHJhbnNmb3JtU2NoZW1hIGZyb20gJy4uL2xlZ2FjeS9UcmFuc2Zvcm0nXG5pbXBvcnQgKiBhcyBBbmltYXRvclNjaGVtYSBmcm9tICcuL0FuaW1hdG9yLmdlbidcbmltcG9ydCAqIGFzIEF1ZGlvU291cmNlU2NoZW1hIGZyb20gJy4vQXVkaW9Tb3VyY2UuZ2VuJ1xuaW1wb3J0ICogYXMgQXZhdGFyQXR0YWNoU2NoZW1hIGZyb20gJy4vQXZhdGFyQXR0YWNoLmdlbidcbmltcG9ydCAqIGFzIEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSBmcm9tICcuL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4nXG5pbXBvcnQgKiBhcyBBdmF0YXJTaGFwZVNjaGVtYSBmcm9tICcuL0F2YXRhclNoYXBlLmdlbidcbmltcG9ydCAqIGFzIEJpbGxib2FyZFNjaGVtYSBmcm9tICcuL0JpbGxib2FyZC5nZW4nXG5pbXBvcnQgKiBhcyBCb3hTaGFwZVNjaGVtYSBmcm9tICcuL0JveFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIENhbWVyYU1vZGVTY2hlbWEgZnJvbSAnLi9DYW1lcmFNb2RlLmdlbidcbmltcG9ydCAqIGFzIENhbWVyYU1vZGVBcmVhU2NoZW1hIGZyb20gJy4vQ2FtZXJhTW9kZUFyZWEuZ2VuJ1xuaW1wb3J0ICogYXMgQ3lsaW5kZXJTaGFwZVNjaGVtYSBmcm9tICcuL0N5bGluZGVyU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgR0xURlNoYXBlU2NoZW1hIGZyb20gJy4vR0xURlNoYXBlLmdlbidcbmltcG9ydCAqIGFzIE1hdGVyaWFsU2NoZW1hIGZyb20gJy4vTWF0ZXJpYWwuZ2VuJ1xuaW1wb3J0ICogYXMgTWVzaENvbGxpZGVyU2NoZW1hIGZyb20gJy4vTWVzaENvbGxpZGVyLmdlbidcbmltcG9ydCAqIGFzIE1lc2hSZW5kZXJlclNjaGVtYSBmcm9tICcuL01lc2hSZW5kZXJlci5nZW4nXG5pbXBvcnQgKiBhcyBORlRTaGFwZVNjaGVtYSBmcm9tICcuL05GVFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlckRvd25TY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJEb3duLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlclVwU2NoZW1hIGZyb20gJy4vT25Qb2ludGVyVXAuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJVcFJlc3VsdC5nZW4nXG5pbXBvcnQgKiBhcyBQbGFuZVNoYXBlU2NoZW1hIGZyb20gJy4vUGxhbmVTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBQb2ludGVyTG9ja1NjaGVtYSBmcm9tICcuL1BvaW50ZXJMb2NrLmdlbidcbmltcG9ydCAqIGFzIFNwaGVyZVNoYXBlU2NoZW1hIGZyb20gJy4vU3BoZXJlU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgVGV4dFNoYXBlU2NoZW1hIGZyb20gJy4vVGV4dFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFVpVGV4dFNjaGVtYSBmcm9tICcuL1VpVGV4dC5nZW4nXG5pbXBvcnQgKiBhcyBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hIGZyb20gJy4vVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4nXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyh7XG4gIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWFcbn06IFBpY2s8SUVuZ2luZSwgJ2RlZmluZUNvbXBvbmVudEZyb21TY2hlbWEnPikge1xuICByZXR1cm4ge1xuXHRcdEFuaW1hdG9yOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEFuaW1hdG9yU2NoZW1hLkFuaW1hdG9yU2NoZW1hLCBBbmltYXRvclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF1ZGlvU291cmNlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hLCBBdWRpb1NvdXJjZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF2YXRhckF0dGFjaDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdmF0YXJBdHRhY2hTY2hlbWEuQXZhdGFyQXR0YWNoU2NoZW1hLCBBdmF0YXJBdHRhY2hTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdmF0YXJNb2RpZmllckFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSwgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXZhdGFyU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyU2hhcGVTY2hlbWEuQXZhdGFyU2hhcGVTY2hlbWEsIEF2YXRhclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QmlsbGJvYXJkOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJpbGxib2FyZFNjaGVtYS5CaWxsYm9hcmRTY2hlbWEsIEJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEJveFNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJveFNoYXBlU2NoZW1hLkJveFNoYXBlU2NoZW1hLCBCb3hTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdENhbWVyYU1vZGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZVNjaGVtYS5DYW1lcmFNb2RlU2NoZW1hLCBDYW1lcmFNb2RlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q2FtZXJhTW9kZUFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEsIENhbWVyYU1vZGVBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q3lsaW5kZXJTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEsIEN5bGluZGVyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRHTFRGU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoR0xURlNoYXBlU2NoZW1hLkdMVEZTaGFwZVNjaGVtYSwgR0xURlNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWF0ZXJpYWw6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEsIE1hdGVyaWFsU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWVzaENvbGxpZGVyOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE1lc2hDb2xsaWRlclNjaGVtYS5NZXNoQ29sbGlkZXJTY2hlbWEsIE1lc2hDb2xsaWRlclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE1lc2hSZW5kZXJlcjogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hLCBNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRORlRTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShORlRTaGFwZVNjaGVtYS5ORlRTaGFwZVNjaGVtYSwgTkZUU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJEb3duOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE9uUG9pbnRlckRvd25TY2hlbWEuT25Qb2ludGVyRG93blNjaGVtYSwgT25Qb2ludGVyRG93blNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlckRvd25SZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYS5PblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLCBPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyVXA6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyVXBTY2hlbWEuT25Qb2ludGVyVXBTY2hlbWEsIE9uUG9pbnRlclVwU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyVXBSZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEsIE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UGxhbmVTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShQbGFuZVNoYXBlU2NoZW1hLlBsYW5lU2hhcGVTY2hlbWEsIFBsYW5lU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRQb2ludGVyTG9jazogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShQb2ludGVyTG9ja1NjaGVtYS5Qb2ludGVyTG9ja1NjaGVtYSwgUG9pbnRlckxvY2tTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRTcGhlcmVTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShTcGhlcmVTaGFwZVNjaGVtYS5TcGhlcmVTaGFwZVNjaGVtYSwgU3BoZXJlU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRUZXh0U2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVGV4dFNoYXBlU2NoZW1hLlRleHRTaGFwZVNjaGVtYSwgVGV4dFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VWlUZXh0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFVpVGV4dFNjaGVtYS5VaVRleHRTY2hlbWEsIFVpVGV4dFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFZpc2liaWxpdHlDb21wb25lbnQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5WaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLCBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLkNPTVBPTkVOVF9JRCksXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiwgSUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZSdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDFcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybVR5cGUgPSB7XG4gIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfVxuICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyOyB3OiBudW1iZXIgfVxuICBzY2FsZTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH1cbiAgcGFyZW50PzogRW50aXR5XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fTEVOR1RIID0gNDRcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybVNjaGVtYTogSVNjaGVtYTxUcmFuc2Zvcm1UeXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBUcmFuc2Zvcm1UeXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHRyID0gYnVpbGRlci5pbmNyZW1lbnRXcml0ZU9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIsIHZhbHVlLnBvc2l0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDQsIHZhbHVlLnBvc2l0aW9uLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDgsIHZhbHVlLnBvc2l0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDEyLCB2YWx1ZS5yb3RhdGlvbi54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAxNiwgdmFsdWUucm90YXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjAsIHZhbHVlLnJvdGF0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI0LCB2YWx1ZS5yb3RhdGlvbi53KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyOCwgdmFsdWUuc2NhbGUueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzIsIHZhbHVlLnNjYWxlLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDM2LCB2YWx1ZS5zY2FsZS56KVxuICAgIGJ1aWxkZXIuc2V0VWludDMyKHB0ciArIDQwLCB2YWx1ZS5wYXJlbnQgfHwgMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVHJhbnNmb3JtVHlwZSB7XG4gICAgY29uc3QgcHRyID0gcmVhZGVyLmluY3JlbWVudFJlYWRPZmZzZXQoVFJBTlNGT1JNX0xFTkdUSClcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyKSxcbiAgICAgICAgeTogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgNCksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDgpXG4gICAgICB9LFxuICAgICAgcm90YXRpb246IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMTIpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxNiksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDIwKSxcbiAgICAgICAgdzogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjQpXG4gICAgICB9LFxuICAgICAgc2NhbGU6IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjgpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAzMiksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDM2KVxuICAgICAgfSxcbiAgICAgIHBhcmVudDogcmVhZGVyLmdldFVpbnQzMihwdHIgKyA0MCkgYXMgRW50aXR5XG4gICAgfVxuICB9LFxuICBjcmVhdGUoKTogVHJhbnNmb3JtVHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSxcbiAgICAgIHNjYWxlOiB7IHg6IDEsIHk6IDEsIHo6IDEgfSxcbiAgICAgIHJvdGF0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAsIHc6IDEgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50KHtcbiAgZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYVxufTogUGljazxJRW5naW5lLCAnZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSc+KTogQ29tcG9uZW50RGVmaW5pdGlvbjxcbiAgSVNjaGVtYTxUcmFuc2Zvcm1UeXBlPixcbiAgUGFydGlhbDxUcmFuc2Zvcm1UeXBlPlxuPiB7XG4gIHJldHVybiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFRyYW5zZm9ybVNjaGVtYSwgQ09NUE9ORU5UX0lEKVxufVxuIiwiaW1wb3J0IHsgUHJlRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcblxuaW1wb3J0IHsgZGVmaW5lTGlicmFyeUNvbXBvbmVudHMgfSBmcm9tICcuL2dlbmVyYXRlZC9pbmRleC5nZW4nXG5pbXBvcnQgKiBhcyBNZXNoUmVuZGVyZXJTY2hlbWEgZnJvbSAnLi9nZW5lcmF0ZWQvTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCB7IFBCTWVzaFJlbmRlcmVyIH0gZnJvbSAnLi9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCB7IGRlZmluZVRyYW5zZm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbGVnYWN5L1RyYW5zZm9ybSdcblxuZXhwb3J0IGVudW0gQ09NUE9ORU5UX0lEIHtcbiAgU1lOQyA9IDEwMDBcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFNka0NvbXBvbmVudHMgPSBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVTZGtDb21wb25lbnRzPlxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU2RrQ29tcG9uZW50cyhlbmdpbmU6IFByZUVuZ2luZSkge1xuICBjb25zdCBhdXRvZ2VuZXJhdGVkQ29tcG9uZW50cyA9IGRlZmluZUxpYnJhcnlDb21wb25lbnRzKGVuZ2luZSlcbiAgZW5naW5lLnJlbW92ZUNvbXBvbmVudERlZmluaXRpb24oYXV0b2dlbmVyYXRlZENvbXBvbmVudHMuTWVzaFJlbmRlcmVyLl9pZClcbiAgcmV0dXJuIHtcbiAgICAuLi5hdXRvZ2VuZXJhdGVkQ29tcG9uZW50cyxcbiAgICBUcmFuc2Zvcm06IGRlZmluZVRyYW5zZm9ybUNvbXBvbmVudChlbmdpbmUpLFxuICAgIE1lc2hSZW5kZXJlcjogZW5naW5lLmRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE8XG4gICAgICBJU2NoZW1hPFBCTWVzaFJlbmRlcmVyPixcbiAgICAgIFBhcnRpYWw8UEJNZXNoUmVuZGVyZXI+XG4gICAgPihNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hLCBNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEKVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJQXJyYXk8VD4odHlwZTogSVNjaGVtYTxUPik6IElTY2hlbWE8QXJyYXk8VD4+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IEFycmF5PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBidWlsZGVyLndyaXRlVWludDMyKHZhbHVlLmxlbmd0aClcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICB0eXBlLnNlcmlhbGl6ZShpdGVtLCBidWlsZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogQXJyYXk8VD4ge1xuICAgICAgY29uc3QgbmV3QXJyYXk6IEFycmF5PFQ+ID0gW11cbiAgICAgIGNvbnN0IGxlbmd0aCA9IHJlYWRlci5yZWFkVWludDMyKClcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaCh0eXBlLmRlc2VyaWFsaXplKHJlYWRlcikpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3QXJyYXlcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEJvb2w6IElTY2hlbWE8Ym9vbGVhbj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogYm9vbGVhbiwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQ4KHZhbHVlID8gMSA6IDApXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDgoKSA9PT0gMVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJRW51bTxUPih0eXBlOiBJU2NoZW1hPGFueT4pOiBJU2NoZW1hPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IFQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIHR5cGUuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB7XG4gICAgICByZXR1cm4gdHlwZS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEZsb2F0MzI6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlRmxvYXQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRGbG9hdDMyKClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwLjBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEZsb2F0NjQ6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlRmxvYXQ2NCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRGbG9hdDY0KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwLjBcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDY0OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDY0KEJpZ0ludCh2YWx1ZSkpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihyZWFkZXIucmVhZEludDY0KCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MzI6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MzIodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDE2OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDE2KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDE2KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQ4OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxhdFN0cmluZzogSVNjaGVtYTxzdHJpbmc+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IHN0cmluZywgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHJlYWRlci5yZWFkQnVmZmVyKCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVjc1N0cmluZyA9IEZsYXRTdHJpbmdcbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuaW1wb3J0IHsgVG9PcHRpb25hbCB9IGZyb20gJy4vdHlwaW5nJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVjIHtcbiAgW2tleTogc3RyaW5nXTogSVNjaGVtYVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQgZXh0ZW5kcyBTcGVjPiA9IFRvT3B0aW9uYWw8e1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIElTY2hlbWFcbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZGVzZXJpYWxpemUnXT5cbiAgICA6IFRbS10gZXh0ZW5kcyBTcGVjXG4gICAgPyBSZXN1bHQ8VFtLXT5cbiAgICA6IG5ldmVyXG59PlxuXG5leHBvcnQgdHlwZSBNYXBTY2hlbWFUeXBlPFQgZXh0ZW5kcyBTcGVjPiA9IElTY2hlbWE8UmVzdWx0PFQ+PlxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElNYXA8VCBleHRlbmRzIFNwZWM+KHNwZWM6IFQpOiBJU2NoZW1hPFJlc3VsdDxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogUmVzdWx0PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICBzcGVjW2tleV0uc2VyaWFsaXplKCh2YWx1ZSBhcyBhbnkpW2tleV0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBSZXN1bHQ8VD4ge1xuICAgICAgY29uc3QgbmV3VmFsdWU6IFJlc3VsdDxUPiA9IHt9IGFzIGFueVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlYykge1xuICAgICAgICAvLyBUT0RPOiBhcyBhbnlcbiAgICAgICAgOyhuZXdWYWx1ZSBhcyBhbnkpW2tleV0gPSBzcGVjW2tleV0uZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5jcmVhdGUoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJT3B0aW9uYWw8VD4oc3BlYzogSVNjaGVtYTxUPik6IElTY2hlbWE8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCB8IHVuZGVmaW5lZCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGJ1aWxkZXIud3JpdGVJbnQ4KDEpXG4gICAgICAgIHNwZWMuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMClcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFQgfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgZXhpc3RzID0gcmVhZGVyLnJlYWRJbnQ4KClcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUFycmF5IH0gZnJvbSAnLi9BcnJheSdcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuL2Jhc2ljL0Jvb2xlYW4nXG5pbXBvcnQgeyBJRW51bSB9IGZyb20gJy4vYmFzaWMvRW51bSdcbmltcG9ydCB7IEZsb2F0MzIsIEZsb2F0NjQgfSBmcm9tICcuL2Jhc2ljL0Zsb2F0J1xuaW1wb3J0IHsgSW50MTYsIEludDMyLCBJbnQ4LCBJbnQ2NCBhcyBpSW50NjQgfSBmcm9tICcuL2Jhc2ljL0ludGVnZXInXG5pbXBvcnQgeyBFY3NTdHJpbmcgfSBmcm9tICcuL2Jhc2ljL1N0cmluZydcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuL0lTY2hlbWEnXG5pbXBvcnQgeyBJTWFwIH0gZnJvbSAnLi9NYXAnXG5pbXBvcnQgeyBJT3B0aW9uYWwgfSBmcm9tICcuL09wdGlvbmFsJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBTY2hlbWFzIHtcbiAgZXhwb3J0IHR5cGUgU2NoZW1hVHlwZSA9IElTY2hlbWFcblxuICBleHBvcnQgY29uc3QgQm9vbGVhbiA9IEJvb2xcblxuICBleHBvcnQgY29uc3QgU3RyaW5nID0gRWNzU3RyaW5nXG5cbiAgZXhwb3J0IGNvbnN0IEZsb2F0ID0gRmxvYXQzMlxuICBleHBvcnQgY29uc3QgRG91YmxlID0gRmxvYXQ2NFxuXG4gIGV4cG9ydCBjb25zdCBCeXRlID0gSW50OFxuICBleHBvcnQgY29uc3QgU2hvcnQgPSBJbnQxNlxuICBleHBvcnQgY29uc3QgSW50ID0gSW50MzJcbiAgZXhwb3J0IGNvbnN0IEludDY0ID0gaUludDY0XG5cbiAgZXhwb3J0IGNvbnN0IE51bWJlciA9IEZsb2F0MzJcblxuICBleHBvcnQgY29uc3QgRW51bSA9IElFbnVtXG4gIGV4cG9ydCBjb25zdCBBcnJheSA9IElBcnJheVxuICBleHBvcnQgY29uc3QgTWFwID0gSU1hcFxuICBleHBvcnQgY29uc3QgT3B0aW9uYWwgPSBJT3B0aW9uYWxcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JkdFByb3RvY29sID0gZXhwb3J0cy5zdGF0ZUl0ZXJhdG9yID0gZXhwb3J0cy5zYW1lRGF0YSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG4vKipcbiAqIENvbXBhcmUgcmF3IGRhdGEuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2FtZURhdGEoYSwgYikge1xuICAgIC8vIEF0IHJlZmVyZW5jZSBsZXZlbFxuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChnbG9iYWxUaGlzLkJ1ZmZlcikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlciAmJiBiIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAvLyBEZWVwIGxldmVsXG4gICAgICAgICAgICByZXR1cm4gYS5lcXVhbHMoYik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zYW1lRGF0YSA9IHNhbWVEYXRhO1xuLyoqXG4gKiBTdGF0ZSBpdGVyYXRvclxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uKiBzdGF0ZUl0ZXJhdG9yKHN0YXRlKSB7XG4gICAgZm9yIChjb25zdCBba2V5MSwgdmFsdWUxXSBvZiBzdGF0ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiB2YWx1ZTEuZW50cmllcygpKSB7XG4gICAgICAgICAgICB5aWVsZCBba2V5MSwga2V5MiwgdmFsdWUyXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc3RhdGVJdGVyYXRvciA9IHN0YXRlSXRlcmF0b3I7XG4vKipcbiAqIEBwdWJsaWNcbiAqIENSRFQgcHJvdG9jb2wuXG4gKiBTdG9yZXMgdGhlIGxhdGVzdCBzdGF0ZSwgYW5kIGRlY2lkZXMgd2hlbmV2ZXIgd2UgaGF2ZVxuICogdG8gcHJvY2VzcyBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGluIGNhc2UgaXRzIGFuIHVwZGF0ZSwgb3JcbiAqIHRvIGRpc2NhcmQgYW5kIHNlbmQgb3VyIGxvY2FsIHZhbHVlIGNhdXNlIHJlbW90ZSBpdCdzIG91dGRhdGVkLlxuICovXG5mdW5jdGlvbiBjcmR0UHJvdG9jb2woKSB7XG4gICAgLyoqXG4gICAgICogTG9jYWwgc3RhdGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGxhdGVzdCBsYW1wb3J0IHRpbWVzdGFtcFxuICAgICAqIGFuZCB0aGUgcmF3IGRhdGEgdmFsdWVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBXZSBzaG91bGQgY2FsbCB0aGlzIGZuIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgc3RhdGVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCByZW1vdGVUaW1lc3RhbXApIHtcbiAgICAgICAgY29uc3Qga2V5MVZhbHVlID0gc3RhdGUuZ2V0KGtleTEpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLm1heChyZW1vdGVUaW1lc3RhbXAsIGtleTFWYWx1ZT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCk7XG4gICAgICAgIGlmIChrZXkxVmFsdWUpIHtcbiAgICAgICAgICAgIGtleTFWYWx1ZS5zZXQoa2V5MiwgeyB0aW1lc3RhbXAsIGRhdGEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdLZXkxVmFsdWUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBuZXdLZXkxVmFsdWUuc2V0KGtleTIsIHsgdGltZXN0YW1wLCBkYXRhIH0pO1xuICAgICAgICAgICAgc3RhdGUuc2V0KGtleTEsIG5ld0tleTFWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdGltZXN0YW1wLCBkYXRhIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBldmVudCBmb3IgdGhlIHNwZWNpZmllZCBrZXkgYW5kIHN0b3JlIHRoZSBuZXcgZGF0YSBhbmRcbiAgICAgKiBsYW1wb3J0IHRpbWVzdG1hcCBpbmNyZW1lbnRlZCBieSBvbmUgaW4gdGhlIHN0YXRlLlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChrZXkxLCBrZXkyLCBkYXRhKSB7XG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXN0YW1wXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IChzdGF0ZS5nZXQoa2V5MSk/LmdldChrZXkyKT8udGltZXN0YW1wIHx8IDApICsgMTtcbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKTtcbiAgICAgICAgcmV0dXJuIHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugb25seSBpZiB0aGUgbGFtcG9ydCBudW1iZXIgcmVjaWV2ZWQgaXMgaGlnaGVyXG4gICAgICogdGhhbiB0aGUgc3RvcmVkIG9uZS4gSWYgaXRzIGxvd2VyLCB3ZSBzcHJlYWQgaXQgdG8gdGhlIG5ldHdvcmsgdG8gY29ycmVjdCB0aGUgcGVlci5cbiAgICAgKiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIGJpZ2dlciByYXcgZGF0YSB3aW5zLlxuICBcbiAgICAgKiBSZXR1cm5zIHRoZSByZWNpZXZlZCBkYXRhIGlmIHRoZSBsYW1wb3J0IG51bWJlciB3YXMgYmlnZ2VyIHRoYW4gb3Vycy5cbiAgICAgKiBJZiBpdCB3YXMgYW4gb3V0ZGF0ZWQgbWVzc2FnZSwgdGhlbiB3ZSByZXR1cm4gdm9pZFxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuZ2V0KGtleTEpPy5nZXQoa2V5Mik7XG4gICAgICAgIC8vIFRoZSByZWNlaXZlZCBtZXNzYWdlIGlzID4gdGhhbiBvdXIgY3VycmVudCB2YWx1ZSwgdXBkYXRlIG91ciBzdGF0ZS5cbiAgICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudGltZXN0YW1wIDwgdGltZXN0YW1wKSB7XG4gICAgICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3V0ZGF0ZWQgTWVzc2FnZS4gUmVzZW5kIG91ciBzdGF0ZSBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmUuXG4gICAgICAgIGlmIChjdXJyZW50LnRpbWVzdGFtcCA+IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXkxLFxuICAgICAgICAgICAgICAgIGtleTIsXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2FtZSBkYXRhLCBzYW1lIHRpbWVzdGFtcC4gV2VpcmRvIGVjaG8gbWVzc2FnZS5cbiAgICAgICAgaWYgKHNhbWVEYXRhKGN1cnJlbnQuZGF0YSwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhY2UgY29uZGl0aW9uLCBzYW1lIHRpbWVzdGFtcCBkaWZmIGRhdGEuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRhKGN1cnJlbnQsIGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZURhdGEoY3VycmVudC5kYXRhLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXkxLFxuICAgICAgICAgICAgICAgIGtleTIsXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKS5kYXRhO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVFdmVudCxcbiAgICAgICAgcHJvY2Vzc01lc3NhZ2UsXG4gICAgICAgIGdldFN0YXRlXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JkdFByb3RvY29sID0gY3JkdFByb3RvY29sO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBUYWtlIHRoZSBtYXggYmV0d2VlbiBjdXJyZW50U2l6ZSBhbmQgaW50ZW5kZWRTaXplIGFuZCB0aGVuIHBsdXMgMTAyNC4gVGhlbixcbiAqICBmaW5kIHRoZSBuZXh0IG5lYXJlciBtdWx0aXBsZSBvZiAxMDI0LlxuICogQHBhcmFtIGN1cnJlbnRTaXplIC0gbnVtYmVyXG4gKiBAcGFyYW0gaW50ZW5kZWRTaXplIC0gbnVtYmVyXG4gKiBAcmV0dXJucyB0aGUgY2FsY3VsYXRlZCBudW1iZXJcbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dFNpemUoY3VycmVudFNpemU6IG51bWJlciwgaW50ZW5kZWRTaXplOiBudW1iZXIpIHtcbiAgY29uc3QgbWluTmV3U2l6ZSA9IE1hdGgubWF4KGN1cnJlbnRTaXplLCBpbnRlbmRlZFNpemUpICsgMTAyNFxuICByZXR1cm4gTWF0aC5jZWlsKG1pbk5ld1NpemUgLyAxMDI0KSAqIDEwMjRcbn1cblxuLyoqXG4gKiBAcGFyYW0gd3JpdGluZyAtIHdyaXRpbmcgb3B0aW9uLCBzZWUgb2JqZWN0IHNwZWNzLlxuICogQHBhcmFtIHJlYWRpbmcgLSByZWFkaW5nIG9wdGlvbiwgc2VlIG9iamVjdCBzcGVjcy5cbiAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgLSBJbml0aWFsIGNhcGFjaXR5IG9mIGJ1ZmZlciB0byBhbGxvY2F0ZSwgaWdub3JlZCBpZiB5b3UgdXNlIHdyaXRpbmcgb3IgcmVhZGluZyBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQnl0ZUJ1ZmZlck9wdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkIHRvIHJlYWQgZnJvbSB0aGVyZS5cbiAgICogQHBhcmFtIGN1cnJlbnRPZmZzZXQgLSBzZXQgdGhlIGN1cnNvciB3aGVyZSBiZWdpbnMgdG8gcmVhZC4gRGVmYXVsdCAwXG4gICAqIEBwYXJhbSBsZW5ndGggLSBkZWxpbWl0ZSB3aGVyZSB0aGUgdmFsaWQgZGF0YSBlbmRzLiBEZWZhdWx0OiBidWZmZXIubGVuZ3RoXG4gICAqL1xuICByZWFkaW5nPzoge1xuICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIGxlbmd0aD86IG51bWJlclxuICAgIGN1cnJlbnRPZmZzZXQ6IG51bWJlclxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBhIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCB0byB3cml0ZSB0aGVyZS5cbiAgICogQHBhcmFtIGN1cnJlbnRPZmZzZXQgLSBzZXQgdGhlIGN1cnNvciB0byBub3Qgc3RhcnQgd3JpdGluZyBmcm9tIHRoZSBiZWdpbiBvZiBpdC4gRGVmYXVsdCAwXG4gICAqL1xuICB3cml0aW5nPzoge1xuICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIGN1cnJlbnRPZmZzZXQ/OiBudW1iZXJcbiAgfVxuXG4gIGluaXRpYWxDYXBhY2l0eT86IG51bWJlclxufVxuXG5jb25zdCBkZWZhdWx0SW5pdGlhbENhcGFjaXR5ID0gMTAyNDBcblxuLyoqXG4gKiBCeXRlQnVmZmVyIGlzIGEgd3JhcHBlciBvZiBEYXRhVmlldyB3aGljaCBhbHNvIGFkZHMgYSByZWFkIGFuZCB3cml0ZSBvZmZzZXQuXG4gKiAgQWxzbyBpbiBhIHdyaXRlIG9wZXJhdGlvbiBpdCByZXNpemVzIHRoZSBidWZmZXIgaXMgYmVpbmcgdXNlZCBpZiBpdCBuZWVkcy5cbiAqXG4gKiAtIFVzZSByZWFkIGFuZCB3cml0ZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvciBjb25zdW1lIGRhdGEuXG4gKiAtIFVzZSBzZXQgYW5kIGdldCBvbmx5IGlmIHlvdSBhcmUgc3VyZSB0aGF0IHlvdSdyZSBkb2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ5dGVCdWZmZXIob3B0aW9uczogQ3JlYXRlQnl0ZUJ1ZmZlck9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbml0aWFsUk9mZnNldDogbnVtYmVyID0gb3B0aW9ucy5yZWFkaW5nPy5jdXJyZW50T2Zmc2V0IHx8IDBcbiAgbGV0IGluaXRpYWxCdWZmZXI6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbFxuICBsZXQgaW5pdGlhbFdPZmZzZXQ6IG51bWJlciA9IDBcblxuICBpZiAob3B0aW9ucy53cml0aW5nKSB7XG4gICAgaW5pdGlhbEJ1ZmZlciA9IG9wdGlvbnMud3JpdGluZy5idWZmZXJcbiAgICBpZiAob3B0aW9ucy53cml0aW5nLmN1cnJlbnRPZmZzZXQpIHtcbiAgICAgIGluaXRpYWxXT2Zmc2V0ID0gb3B0aW9ucy53cml0aW5nLmN1cnJlbnRPZmZzZXRcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5yZWFkaW5nKSB7XG4gICAgaW5pdGlhbEJ1ZmZlciA9IG9wdGlvbnMucmVhZGluZy5idWZmZXJcbiAgICBpbml0aWFsV09mZnNldCA9IG9wdGlvbnMucmVhZGluZy5sZW5ndGggfHwgb3B0aW9ucy5yZWFkaW5nLmJ1ZmZlci5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBvcHRpb25zLmluaXRpYWxDYXBhY2l0eSB8fCBkZWZhdWx0SW5pdGlhbENhcGFjaXR5XG4gICAgKVxuICB9XG5cbiAgbGV0IGJ1ZmZlcjogVWludDhBcnJheSA9IGluaXRpYWxCdWZmZXIhXG4gIGxldCB2aWV3OiBEYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldClcbiAgbGV0IHdvZmZzZXQ6IG51bWJlciA9IGluaXRpYWxXT2Zmc2V0XG4gIGxldCByb2Zmc2V0OiBudW1iZXIgPSBpbml0aWFsUk9mZnNldFxuXG4gIC8qKlxuICAgKiBJbmNyZWVtZW50IHRoZSB3cml0ZSBvZmZzZXQgYW5kIHJlc2l6ZSB0aGUgYnVmZmVyIGlmIGl0IG5lZWRzLlxuICAgKi9cbiAgY29uc3Qgd29BZGQgPSAoYW1vdW50OiBudW1iZXIpID0+IHtcbiAgICBpZiAod29mZnNldCArIGFtb3VudCA+IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXdzaXplID0gZ2V0TmV4dFNpemUoYnVmZmVyLmJ5dGVMZW5ndGgsIHdvZmZzZXQgKyBhbW91bnQpXG4gICAgICBjb25zdCBuZXdCdWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdzaXplKVxuICAgICAgbmV3QnVmZmVyLnNldChidWZmZXIpXG4gICAgICBidWZmZXIgPSBuZXdCdWZmZXJcbiAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlcilcbiAgICB9XG5cbiAgICB3b2Zmc2V0ICs9IGFtb3VudFxuICAgIHJldHVybiB3b2Zmc2V0IC0gYW1vdW50XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50IHRoZSByZWFkIG9mZnNldCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyB0cnlpbmcgdG8gcmVhZFxuICAgKiAgb3V0c2lkZSB0aGUgYm91bmRzLlxuICAgKi9cbiAgY29uc3Qgcm9BZGQgPSAoYW1vdW50OiBudW1iZXIpID0+IHtcbiAgICBpZiAocm9mZnNldCArIGFtb3VudCA+IHdvZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3V0c2lkZSBvZiB0aGUgYm91bmRzIG9mIHdyaXRlbiBkYXRhLicpXG4gICAgfVxuXG4gICAgcm9mZnNldCArPSBhbW91bnRcbiAgICByZXR1cm4gcm9mZnNldCAtIGFtb3VudFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgZW50aXJlIGN1cnJlbnQgVWludDhBcnJheS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IGlmIHRoZSBidWZmZXIgZ3Jvd3MsIHRoZSB2aWV3IGhhZCBjaGFuZ2VkIGl0c2VsZixcbiAgICAgKiAgYW5kIHRoZSByZWZlcmVuY2Ugd2lsbCBiZSBhIGludmFsaWQgb25lLlxuICAgICAqL1xuICAgIGJ1ZmZlcigpOiBVaW50OEFycmF5IHtcbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBjYXBhY2l0eSBvZiB0aGUgY3VycmVudCBidWZmZXJcbiAgICAgKi9cbiAgICBidWZmZXJMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBidWZmZXIubGVuZ3RoXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXNldHMgYnl0ZUJ1ZmZlciB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICAgKi9cbiAgICByZXNldEJ1ZmZlcigpOiB2b2lkIHtcbiAgICAgIHJvZmZzZXQgPSAwXG4gICAgICB3b2Zmc2V0ID0gMFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcmVhZCBvZmZzZXRcbiAgICAgKi9cbiAgICBjdXJyZW50UmVhZE9mZnNldCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHJvZmZzZXRcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHdyaXRlIG9mZnNldFxuICAgICAqL1xuICAgIGN1cnJlbnRXcml0ZU9mZnNldCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvZmZzZXRcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlYWRpbmcgcHVycG9zZVxuICAgICAqIFJldHVybnMgdGhlIHByZXZpdW9zIG9mZnNzZXQgc2l6ZSBiZWZvcmUgaW5jcmVtZW50aW5nXG4gICAgICovXG4gICAgaW5jcmVtZW50UmVhZE9mZnNldChhbW91bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gcm9BZGQoYW1vdW50KVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgSG93IG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byByZWFkLlxuICAgICAqL1xuICAgIHJlbWFpbmluZ0J5dGVzKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldCAtIHJvZmZzZXRcbiAgICB9LFxuICAgIHJlYWRGbG9hdDMyKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDMyKHJvQWRkKDQpKVxuICAgIH0sXG4gICAgcmVhZEZsb2F0NjQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0NjQocm9BZGQoOCkpXG4gICAgfSxcbiAgICByZWFkSW50OCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50OChyb0FkZCgxKSlcbiAgICB9LFxuICAgIHJlYWRJbnQxNigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MTYocm9BZGQoMikpXG4gICAgfSxcbiAgICByZWFkSW50MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDMyKHJvQWRkKDQpKVxuICAgIH0sXG4gICAgcmVhZEludDY0KCk6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdJbnQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRVaW50OCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDgocm9BZGQoMSkpXG4gICAgfSxcbiAgICByZWFkVWludDE2KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MTYocm9BZGQoMikpXG4gICAgfSxcbiAgICByZWFkVWludDMyKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkVWludDY0KCk6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdVaW50NjQocm9BZGQoOCkpXG4gICAgfSxcbiAgICByZWFkQnVmZmVyKCkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdmlldy5nZXRVaW50MzIocm9BZGQoNCkpXG4gICAgICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KHJvQWRkKGxlbmd0aCksIHJvQWRkKDApKVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogV3JpdGluZyBwdXJwb3NlXG4gICAgICovXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IG9mZnNldFxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBob3cgbWFueSBieXRlc1xuICAgICAqIEByZXR1cm5zIFRoZSBvZmZzZXQgd2hlbiB0aGlzIHJlc2VydmluZyBzdGFydHMuXG4gICAgICovXG4gICAgaW5jcmVtZW50V3JpdGVPZmZzZXQoYW1vdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvQWRkKGFtb3VudClcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdGVuIGluIHRoZSBidWZmZXIuXG4gICAgICovXG4gICAgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvZmZzZXRcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRha2UgY2FyZSB1c2luZyB0aGlzIGZ1bmN0aW9uLCBpZiB5b3UgbW9kaWZ5IHRoZSBkYXRhIGFmdGVyLCB0aGVcbiAgICAgKiByZXR1cm5lZCBzdWJhcnJheSB3aWxsIGNoYW5nZSB0b28uIElmIHlvdSdsbCBtb2RpZnkgdGhlIGNvbnRlbnQgb2YgdGhlXG4gICAgICogYnl0ZWJ1ZmZlciwgbWF5YmUgeW91IHdhbnQgdG8gdXNlIHRvQ29waWVkQmluYXJ5KClcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBzdWJhcnJheSBmcm9tIDAgdG8gb2Zmc2V0IGFzIHJlZmVyZW5jZS5cbiAgICAgKi9cbiAgICB0b0JpbmFyeSgpIHtcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkoMCwgd29mZnNldClcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2FmZSBjb3BpZWQgYnVmZmVyIG9mIHRoZSBjdXJyZW50IGRhdGEgb2YgQnl0ZUJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHN1YmFycmF5IGZyb20gMCB0byBvZmZzZXQuXG4gICAgICovXG4gICAgdG9Db3BpZWRCaW5hcnkoKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhpcy50b0JpbmFyeSgpKVxuICAgIH0sXG5cbiAgICB3cml0ZUJ1ZmZlcih2YWx1ZTogVWludDhBcnJheSwgd3JpdGVMZW5ndGg6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICBpZiAod3JpdGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy53cml0ZVVpbnQzMih2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvID0gd29BZGQodmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgIGJ1ZmZlci5zZXQodmFsdWUsIG8pXG4gICAgfSxcbiAgICB3cml0ZUZsb2F0MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldEZsb2F0MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUZsb2F0NjQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEZsb2F0NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldEludDgobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDE2KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgyKVxuICAgICAgdmlldy5zZXRJbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldEludDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnSW50NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ4KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgxKVxuICAgICAgdmlldy5zZXRVaW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDE2KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgyKVxuICAgICAgdmlldy5zZXRVaW50MTYobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0VWludDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50NjQodmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIC8vIERhdGF2aWV3IFByb3h5XG4gICAgZ2V0RmxvYXQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ4KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDgob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MTYob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50NjQob2Zmc2V0OiBudW1iZXIpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnSW50NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDgob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDE2KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdVaW50NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgc2V0RmxvYXQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRGbG9hdDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRGbG9hdDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDgob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MTYob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MTYob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDgob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50MTYob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgdmlldy5zZXRCaWdVaW50NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEJ5dGVCdWZmZXIgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVCeXRlQnVmZmVyPlxuIiwiLyoqXG4gKiBUaGUgd2lyZSBtZXNzYWdlIGlzIHRoZSB0b3AtbGV2ZWwgbWVzc2FnZSB0aGF0IGNhbiBiZSBwYWNrZWRcbiAqICBpbnNpZGUgaXQgY2FuIGNvbnRhaW4gYSBkYXRhIHdpdGggYW5vdGhlciBzdHJ1Y3R1cmUgb3IgcHJvdG9jb2xcbiAqXG4gKiBFYWNoIHdpcmUgbWVzc2FnZSBoYXMgdGhyZWUgcHJpbWl0aXZlIHByb3BlcnR5IHRoYXQgaXQnbGwgbmV2ZXIgY2hhbmdlXG4gKiAgIC0tLT4gbGVuZ3RoICAgICAgICB1aW50MzIgKG1lc3NhZ2Ugc2l6ZSB1cCB0byA0LDI5NCw5NjcsMjk1KVxuICogICAtLS0+IHZlcnNpb24gICAgICAgdWludDMyIChmb3Igbm93IGp1c3QgYSBudW1iZXIgd2hpY2ggaXMgemVybylcbiAqICAgLS0tPiBtZXNzYWdlIHR5cGUgIHVpbnQzMlxuICogVGhlIGxlbmd0aCBpbmRpY2F0ZXMgaG93IG1hbnkgYnl0ZXMgYXJlIGFib3ZlIHNlbGYsIHRoZSB2ZXJzaW9uIGluXG4gKiBjb21iaW5hdGlvbiB3aXRoIG1lc3NhZ2UgdHlwZSBkZWZpbmVzIHRoZSBzZXQgb2YgaGFuZGxlcnMgdGhhdCB3aWxsIGJlXG4gKiBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZVxuICpcbiAqL1xuXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi9CeXRlQnVmZmVyJ1xuXG50eXBlIFVpbnQzMiA9IG51bWJlclxuXG5leHBvcnQgbmFtZXNwYWNlIFdpcmVNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gRW51bSB7XG4gICAgUkVTRVJWRUQgPSAwLFxuXG4gICAgLy8gQ29tcG9uZW50IE9wZXJhdGlvblxuICAgIFBVVF9DT01QT05FTlQgPSAxLFxuICAgIERFTEVURV9DT01QT05FTlQgPSAyLFxuXG4gICAgTUFYX01FU1NBR0VfVFlQRVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBsZW5ndGggLSBVaW50MzIgdGhlIGxlbmd0aCBvZiBhbGwgbWVzc2FnZSAoaW5jbHVkaW5nIHRoZSBoZWFkZXIpXG4gICAqIEBwYXJhbSB0eXBlIC0gZGVmaW5lIHRoZSBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIHRoZSBkYXRhXG4gICAqL1xuICBleHBvcnQgdHlwZSBIZWFkZXIgPSB7XG4gICAgbGVuZ3RoOiBVaW50MzJcbiAgICB0eXBlOiBVaW50MzJcbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBIRUFERVJfTEVOR1RIID0gOFxuICAvKipcbiAgICogVmFsaWRhdGUgaWYgdGhlIG1lc3NhZ2UgaW5jb21pbmcgaXMgY29tcGxldGVkXG4gICAqIEBwYXJhbSBidWYgLSBCeXRlQnVmZmVyXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoYnVmOiBCeXRlQnVmZmVyKSB7XG4gICAgY29uc3QgcmVtID0gYnVmLnJlbWFpbmluZ0J5dGVzKClcbiAgICBpZiAocmVtIDwgSEVBREVSX0xFTkdUSCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZUxlbmd0aCA9IGJ1Zi5nZXRVaW50MzIoYnVmLmN1cnJlbnRSZWFkT2Zmc2V0KCkpXG4gICAgaWYgKHJlbSA8IG1lc3NhZ2VMZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVhZEhlYWRlcihidWY6IEJ5dGVCdWZmZXIpOiBIZWFkZXIgfCBudWxsIHtcbiAgICBpZiAoIXZhbGlkYXRlKGJ1ZikpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aDogYnVmLnJlYWRVaW50MzIoKSxcbiAgICAgIHR5cGU6IGJ1Zi5yZWFkVWludDMyKCkgYXMgRW51bVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXaXJlTWVzc2FnZVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2VuZ2luZS9jb21wb25lbnQnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL0J5dGVCdWZmZXInXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vd2lyZU1lc3NhZ2UnXG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29tcG9uZW50T3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBlbnRpdHkgLSBVaW50MzIgbnVtYmVyIG9mIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIGNvbXBvbmVudElkIC0gVWludDMyIG51bWJlciBvZiBpZFxuICAgKiBAcGFyYW0gdGltZXN0YW1wIC0gVWludDY0IExhbXBvcnQgdGltZXN0YW1wXG4gICAqIEBwYXJhbSBkYXRhIC0gVWludDhbXSBkYXRhIG9mIGNvbXBvbmVudFxuICAgKi9cbiAgZXhwb3J0IHR5cGUgSVB1dENvbXBvbmVudCA9IHtcbiAgICBlbnRpdHk6IEVudGl0eVxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgICB0aW1lc3RhbXA6IG51bWJlclxuICAgIGRhdGE6IFVpbnQ4QXJyYXlcbiAgfVxuICBleHBvcnQgdHlwZSBJRGVsZXRlQ29tcG9uZW50ID0ge1xuICAgIGVudGl0eTogRW50aXR5XG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICAgIHRpbWVzdGFtcDogbnVtYmVyXG4gICAgZGF0YT86IHVuZGVmaW5lZFxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IE1FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDIwXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGFuIG9wdGltYWwgd3JpdGluZyBkYXRhIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXJcbiAgICogIGFscmVhZHkgYWxsb2NhdGVkXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gd3JpdGUoXG4gICAgdHlwZTogV2lyZU1lc3NhZ2UuRW51bSxcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0aW1lc3RhbXA6IG51bWJlcixcbiAgICBjb21wb25lbnREZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uLFxuICAgIGJ1ZjogQnl0ZUJ1ZmZlclxuICApIHtcbiAgICAvLyByZXNlcnZlIHRoZSBiZWdpbm5pbmdcbiAgICBjb25zdCBzdGFydE1lc3NhZ2VPZmZzZXQgPSBidWYuaW5jcmVtZW50V3JpdGVPZmZzZXQoXG4gICAgICBXaXJlTWVzc2FnZS5IRUFERVJfTEVOR1RIICsgTUVTU0FHRV9IRUFERVJfTEVOR1RIXG4gICAgKVxuXG4gICAgLy8gd3JpdGUgYm9keVxuICAgIGlmICh0eXBlID09PSBXaXJlTWVzc2FnZS5FbnVtLlBVVF9DT01QT05FTlQpIHtcbiAgICAgIGNvbXBvbmVudERlZmluaXRpb24ud3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5LCBidWYpXG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSBidWYuc2l6ZSgpIC0gc3RhcnRNZXNzYWdlT2Zmc2V0XG5cbiAgICAvLyBXcml0ZSBXaXJlTWVzc2FnZSBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCwgbWVzc2FnZUxlbmd0aClcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDQsIHR5cGUpXG5cbiAgICAvLyBXcml0ZSBDb21wb25lbnRPcGVyYXRpb24gaGVhZGVyXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyA4LCBlbnRpdHkpXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyAxMiwgY29tcG9uZW50RGVmaW5pdGlvbi5faWQpXG4gICAgYnVmLnNldFVpbnQ2NChzdGFydE1lc3NhZ2VPZmZzZXQgKyAxNiwgQmlnSW50KHRpbWVzdGFtcCkpXG4gICAgYnVmLnNldFVpbnQzMihcbiAgICAgIHN0YXJ0TWVzc2FnZU9mZnNldCArIDI0LFxuICAgICAgbWVzc2FnZUxlbmd0aCAtIE1FU1NBR0VfSEVBREVSX0xFTkdUSCAtIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEhcbiAgICApXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVhZChcbiAgICBidWY6IEJ5dGVCdWZmZXJcbiAgKTogKFdpcmVNZXNzYWdlLkhlYWRlciAmIChJUHV0Q29tcG9uZW50IHwgSURlbGV0ZUNvbXBvbmVudCkpIHwgbnVsbCB7XG4gICAgY29uc3QgaGVhZGVyID0gV2lyZU1lc3NhZ2UucmVhZEhlYWRlcihidWYpXG5cbiAgICBpZiAoIWhlYWRlcikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBjb21tb24gPSB7XG4gICAgICAuLi5oZWFkZXIsXG4gICAgICBlbnRpdHk6IGJ1Zi5yZWFkVWludDMyKCkgYXMgRW50aXR5LFxuICAgICAgY29tcG9uZW50SWQ6IGJ1Zi5yZWFkSW50MzIoKSxcbiAgICAgIHRpbWVzdGFtcDogTnVtYmVyKGJ1Zi5yZWFkVWludDY0KCkpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlci50eXBlID09PSBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlQpIHtcbiAgICAgIHJldHVybiBjb21tb25cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29tbW9uLFxuICAgICAgZGF0YTogYnVmLnJlYWRCdWZmZXIoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgY3JkdFByb3RvY29sLCBNZXNzYWdlIGFzIENyZHRNZXNzYWdlIH0gZnJvbSAnQGRjbC9jcmR0J1xuXG5pbXBvcnQgdHlwZSB7IFByZUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBjcmVhdGVCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgQ29tcG9uZW50T3BlcmF0aW9uIGFzIE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL2NyZHQvY29tcG9uZW50T3BlcmF0aW9uJ1xuaW1wb3J0IFdpcmVNZXNzYWdlIGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vd2lyZU1lc3NhZ2UnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvdHlwZXMnXG5pbXBvcnQgeyBSZWNlaXZlTWVzc2FnZSwgVHJhbnNwb3J0TWVzc2FnZSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmR0U2NlbmVTeXN0ZW0oe1xuICBlbmdpbmUsXG4gIHRyYW5zcG9ydHNcbn06IHtcbiAgZW5naW5lOiBQcmVFbmdpbmVcbiAgdHJhbnNwb3J0czogVHJhbnNwb3J0W11cbn0pIHtcbiAgLy8gQ1JEVCBDbGllbnRcbiAgY29uc3QgY3JkdENsaWVudCA9IGNyZHRQcm90b2NvbDxVaW50OEFycmF5PigpXG4gIC8vIE1lc3NhZ2VzIHRoYXQgd2UgcmVjZWl2ZWQgYXQgdHJhbnNwb3J0Lm9uTWVzc2FnZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZFxuICBjb25zdCByZWNlaXZlZE1lc3NhZ2VzOiBSZWNlaXZlTWVzc2FnZVtdID0gW11cbiAgLy8gTWVzc2FnZXMgYWxyZWFkeSBwcm9jZXNzZWQgYnkgdGhlIGVuZ2luZSBidXQgdGhhdCB3ZSBuZWVkIHRvIGJyb2FkY2FzdCB0byBvdGhlciB0cmFuc3BvcnRzLlxuICBjb25zdCB0cmFuc3BvcnRNZXNzYWdlczogVHJhbnNwb3J0TWVzc2FnZVtdID0gW11cbiAgLy8gTWFwIG9mIGVudGl0aWVzIGFscmVhZHkgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uY2VcblxuICB0cmFuc3BvcnRzLmZvckVhY2goXG4gICAgKHRyYW5zcG9ydCkgPT4gKHRyYW5zcG9ydC5vbm1lc3NhZ2UgPSBwYXJzZUNodW5rTWVzc2FnZSh0cmFuc3BvcnQudHlwZSkpXG4gIClcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydFR5cGUgdHJhbnBvcnQgaWQgdG8gaWRlbnRpeSBtZXNzYWdlc1xuICAgKiBAcmV0dXJucyBhIGZ1bmN0aW9uIHRvIHByb2Nlc3MgcmVjZWl2ZWQgbWVzc2FnZXNcbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydFR5cGU6IHN0cmluZykge1xuICAgIC8qKlxuICAgICAqIFJlY2VpdmVzIGEgY2h1bmsgb2YgYmluYXJ5IG1lc3NhZ2VzIGFuZCBzdG9yZXMgYWxsIHRoZSB2YWxpZFxuICAgICAqIENvbXBvbmVudCBPcGVyYXRpb24gTWVzc2FnZXMgYXQgbWVzc2FnZXMgcXVldWVcbiAgICAgKiBAcGFyYW0gY2h1bmtNZXNzYWdlIEEgY2h1bmsgb2YgYmluYXJ5IG1lc3NhZ2VzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhcnNlQ2h1bmtNZXNzYWdlKGNodW5rTWVzc2FnZTogVWludDhBcnJheSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcih7XG4gICAgICAgIHJlYWRpbmc6IHsgYnVmZmVyOiBjaHVua01lc3NhZ2UsIGN1cnJlbnRPZmZzZXQ6IDAgfVxuICAgICAgfSlcblxuICAgICAgd2hpbGUgKFdpcmVNZXNzYWdlLnZhbGlkYXRlKGJ1ZmZlcikpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYnVmZmVyLmN1cnJlbnRSZWFkT2Zmc2V0KClcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UucmVhZChidWZmZXIpIVxuXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZW50aXR5LCBjb21wb25lbnRJZCwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlXG4gICAgICAgIHJlY2VpdmVkTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgdHJhbnNwb3J0VHlwZSxcbiAgICAgICAgICBtZXNzYWdlQnVmZmVyOiBidWZmZXJcbiAgICAgICAgICAgIC5idWZmZXIoKVxuICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRSZWFkT2Zmc2V0KCkpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbmQgY2xlYXIgdGhlIG1lc3NhZXMgcXVldWVcbiAgICogQHJldHVybnMgbWVzc2FnZXMgcmVjaWV2ZWQgYnkgdGhlIHRyYW5zcG9ydCB0byBwcm9jZXNzIG9uIHRoZSBuZXh0IHRpY2tcbiAgICovXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2VzPFQgPSB1bmtub3duPih2YWx1ZTogVFtdKSB7XG4gICAgY29uc3QgbWVzc2FnZXNUb1Byb2Nlc3MgPSBBcnJheS5mcm9tKHZhbHVlKVxuICAgIHZhbHVlLmxlbmd0aCA9IDBcbiAgICByZXR1cm4gbWVzc2FnZXNUb1Byb2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZuIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHRpY2suXG4gICAqIFByb2Nlc3MgYWxsIHRoZSBtZXNzYWdlcyBxdWV1ZSByZWNlaXZlZCBieSB0aGUgdHJhbnNwb3J0XG4gICAqL1xuICBmdW5jdGlvbiByZWNlaXZlTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgbWVzc2FnZXNUb1Byb2Nlc3MgPSBnZXRNZXNzYWdlcyhyZWNlaXZlZE1lc3NhZ2VzKVxuICAgIGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzVG9Qcm9jZXNzKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgdGltZXN0YW1wLCBjb21wb25lbnRJZCwgZW50aXR5LCB0eXBlIH0gPSBtZXNzYWdlXG4gICAgICAgIGNvbnN0IGNyZHRNZXNzYWdlOiBDcmR0TWVzc2FnZTxVaW50OEFycmF5PiA9IHtcbiAgICAgICAgICBrZXkxOiBlbnRpdHksXG4gICAgICAgICAga2V5MjogY29tcG9uZW50SWQsXG4gICAgICAgICAgZGF0YTogZGF0YSB8fCBudWxsLFxuICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZW5naW5lLmdldENvbXBvbmVudChjb21wb25lbnRJZClcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGNyZHRDbGllbnQucHJvY2Vzc01lc3NhZ2UoY3JkdE1lc3NhZ2UpXG5cbiAgICAgICAgLy8gQ1JEVCBvdXRkYXRlZCBtZXNzYWdlLiBSZXNlbmQgdGhpcyBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmVcbiAgICAgICAgaWYgKGNyZHRNZXNzYWdlICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IGNvbXBvbmVudC5oYXMoZW50aXR5KVxuICAgICAgICAgICAgPyBXaXJlTWVzc2FnZS5FbnVtLlBVVF9DT01QT05FTlRcbiAgICAgICAgICAgIDogV2lyZU1lc3NhZ2UuRW51bS5ERUxFVEVfQ09NUE9ORU5UXG4gICAgICAgICAgTWVzc2FnZS53cml0ZSh0eXBlLCBlbnRpdHksIGN1cnJlbnQudGltZXN0YW1wLCBjb21wb25lbnQsIGJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQcm9jZXNzIENSRFQgTWVzc2FnZVxuICAgICAgICAgIGlmICh0eXBlID09PSBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgICAgcmVhZGluZzogeyBidWZmZXI6IG1lc3NhZ2UuZGF0YSEsIGN1cnJlbnRPZmZzZXQ6IDAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmIgPSBjcmVhdGVCeXRlQnVmZmVyKG9wdHMpXG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBlbmdpbmUgY29tcG9uZW50XG4gICAgICAgICAgICBjb21wb25lbnQudXBzZXJ0RnJvbUJpbmFyeShtZXNzYWdlLmVudGl0eSwgYmIpXG4gICAgICAgICAgICBjb21wb25lbnQuY2xlYXJEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFkZCBtZXNzYWdlIHRvIHRyYW5zcG9ydCBxdWV1ZSB0byBiZSBwcm9jZXNzZWQgYnkgb3RoZXJzIHRyYW5zcG9ydHNcbiAgICAgICAgICB0cmFuc3BvcnRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlci5zaXplKCkpIHtcbiAgICAgICAgdHJhbnNwb3J0LnNlbmQoYnVmZmVyLnRvQmluYXJ5KCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIHRoZSBkaXJ0eSBtYXAgYW5kIGdlbmVyYXRlcyBjcmR0IG1lc3NhZ2VzIHRvIGJlIHNlbmRcbiAgICogQHBhcmFtIGRpcnR5TWFwIGEgbWFwIG9mIHsgZW50aXRpZXM6IFtjb21wb25lbnRJZF0gfVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlTWVzc2FnZXMoZGlydHlNYXA6IE1hcDxFbnRpdHksIFNldDxudW1iZXI+Pikge1xuICAgIC8vIENSRFQgTWVzc2FnZXMgd2lsbCBiZSB0aGUgbWVyZ2UgYmV0d2VlbiB0aGUgcmVjaWV2ZWQgdHJhbnNwb3J0IG1lc3NhZ2VzIGFuZCB0aGUgbmV3IGNyZHQgbWVzc2FnZXNcbiAgICBjb25zdCBjcmR0TWVzc2FnZXMgPSBnZXRNZXNzYWdlcyh0cmFuc3BvcnRNZXNzYWdlcylcbiAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcblxuICAgIGZvciAoY29uc3QgW2VudGl0eSwgY29tcG9uZW50c0lkXSBvZiBkaXJ0eU1hcCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnRJZCBvZiBjb21wb25lbnRzSWQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZW5naW5lLmdldENvbXBvbmVudChjb21wb25lbnRJZClcbiAgICAgICAgY29uc3QgZW50aXR5Q29tcG9uZW50ID0gY29tcG9uZW50LmhhcyhlbnRpdHkpXG4gICAgICAgICAgPyBjb21wb25lbnQudG9CaW5hcnkoZW50aXR5KS50b0JpbmFyeSgpXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gY3JkdENsaWVudC5jcmVhdGVFdmVudChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZW50aXR5Q29tcG9uZW50XG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb21wb25lbnQuaGFzKGVudGl0eSlcbiAgICAgICAgICA/IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVFxuICAgICAgICAgIDogV2lyZU1lc3NhZ2UuRW51bS5ERUxFVEVfQ09NUE9ORU5UXG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydE1lc3NhZ2U6IE9taXQ8VHJhbnNwb3J0TWVzc2FnZSwgJ21lc3NhZ2VCdWZmZXInPiA9IHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcFxuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFuc3BvcnRzLnNvbWUoKHQpID0+IHQuZmlsdGVyKHRyYW5zcG9ydE1lc3NhZ2UpKSkge1xuICAgICAgICAgIE1lc3NhZ2Uud3JpdGUodHlwZSwgZW50aXR5LCBldmVudC50aW1lc3RhbXAsIGNvbXBvbmVudCwgYnVmZmVyKVxuICAgICAgICAgIGNyZHRNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLnRyYW5zcG9ydE1lc3NhZ2UsXG4gICAgICAgICAgICBtZXNzYWdlQnVmZmVyOiBidWZmZXJcbiAgICAgICAgICAgICAgLmJ1ZmZlcigpXG4gICAgICAgICAgICAgIC5zdWJhcnJheShvZmZzZXQsIGJ1ZmZlci5jdXJyZW50V3JpdGVPZmZzZXQoKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VuZCBtZXNzYWdlcyB0byB0cmFuc3BvcnRzXG4gICAgY29uc3QgdHJhbnNwb3J0QnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgZm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykge1xuICAgICAgdHJhbnNwb3J0QnVmZmVyLnJlc2V0QnVmZmVyKClcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBjcmR0TWVzc2FnZXMpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydC5maWx0ZXIobWVzc2FnZSkpIHtcbiAgICAgICAgICB0cmFuc3BvcnRCdWZmZXIud3JpdGVCdWZmZXIobWVzc2FnZS5tZXNzYWdlQnVmZmVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydEJ1ZmZlci5zaXplKCkpIHtcbiAgICAgICAgdHJhbnNwb3J0LnNlbmQodHJhbnNwb3J0QnVmZmVyLnRvQmluYXJ5KCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNZXNzYWdlcyxcbiAgICByZWNlaXZlTWVzc2FnZXNcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4vY29tcG9uZW50J1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5TWFwPEssIFY+ID0gUmVhZG9ubHlNYXA8XG4gIERlZXBSZWFkb25seTxLPixcbiAgRGVlcFJlYWRvbmx5PFY+XG4+XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5U2V0PFQ+ID0gUmVhZG9ubHlTZXQ8RGVlcFJlYWRvbmx5PFQ+PlxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seU9iamVjdDxUPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4ga2V5b2YgVF06IERlZXBSZWFkb25seTxUW0tdPlxufVxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRvbmx5UHJpbWl0aXZlID1cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJbXVxuICB8IHN0cmluZ1tdXG4gIHwgYm9vbGVhblxuICB8IGJvb2xlYW5bXVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVhZG9ubHlDb21wb25lbnRTY2hlbWE8XG4gIFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXVxuPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBDb21wb25lbnREZWZpbml0aW9uXG4gICAgPyBSZXR1cm5UeXBlPFRbS11bJ2dldCddPlxuICAgIDogbmV2ZXJcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seTxUPiA9IFQgZXh0ZW5kcyBSZWFkb25seVByaW1pdGl2ZVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gRGVlcFJlYWRvbmx5TWFwPEssIFY+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBNPlxuICA/IERlZXBSZWFkb25seVNldDxNPlxuICA6IERlZXBSZWFkb25seU9iamVjdDxUPlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcFJlYWRvbmx5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHZhbDogVFxuKTogRGVlcFJlYWRvbmx5PFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi52YWwgfSkgYXMgRGVlcFJlYWRvbmx5PFQ+XG59XG4iLCJpbXBvcnQgdHlwZSB7IElTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyLCBjcmVhdGVCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5pbXBvcnQgeyBkZWVwUmVhZG9ubHksIERlZXBSZWFkb25seSB9IGZyb20gJy4vcmVhZG9ubHknXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFY3NSZXN1bHQ8VCBleHRlbmRzIElTY2hlbWE+ID0gVCBleHRlbmRzIElTY2hlbWFcbiAgPyBSZXR1cm5UeXBlPFRbJ2Rlc2VyaWFsaXplJ10+XG4gIDogbmV2ZXJcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudFR5cGU8VCBleHRlbmRzIElTY2hlbWE+ID0gRWNzUmVzdWx0PFQ+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDb21wb25lbnREZWZpbml0aW9uPFxuICBUIGV4dGVuZHMgSVNjaGVtYSA9IElTY2hlbWE8YW55PixcbiAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuPiA9IHtcbiAgX2lkOiBudW1iZXJcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudFxuICAgKi9cbiAgZGVmYXVsdCgpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj5cblxuICAvKipcbiAgICogR2V0IGlmIHRoZSBlbnRpdHkgaGFzIHRoaXMgY29tcG9uZW50XG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmhhcyhteUVudGl0eSkgLy8gcmV0dXJuIGZhbHNlXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpXG4gICAqIFRyYW5zZm9ybS5oYXMobXlFbnRpdHkpIC8vIHJldHVybiB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzKGVudGl0eTogRW50aXR5KTogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlYWRvbmx5IGNvbXBvbmVudCBvZiB0aGUgZW50aXR5ICh0byBtdXRhdGUgaXQsIHVzZSBnZXRNdXRhYmxlIGluc3RlYWQpLCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEByZXR1cm5cbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSlcbiAgICogY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChteUVudGl0eSkgLy8gcmV0dXJuIHRydWVcbiAgICogbG9nKHRyYW5zZm9ybS5wb3NpdGlvbi54ID09PSAwKSAvLyBsb2cgJ3RydWUnXG4gICAqXG4gICAqIHRyYW5zZm9ybS5wb3NpdGlvbi55ID0gMTAgLy8gaWxsZWdhbCBzdGF0ZW1lbnQsIHRvIG11dGF0ZSB0aGUgY29tcG9uZW50IHVzZSBnZXRNdXRhYmxlXG4gICAqIGBgYFxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBvdGhlckVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uZ2V0KG90aGVyRW50aXR5KSAvLyB0aHJvdyBhbiBlcnJvciEhXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0KGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhZG9ubHkgY29tcG9uZW50IG9mIHRoZSBlbnRpdHkgKHRvIG11dGF0ZSBpdCwgdXNlIGdldE11dGFibGUgaW5zdGVhZCksIG9yIG51bGwgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcmV0dXJuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG90aGVyRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIGxvZyhUcmFuc2Zvcm0uZ2V0KG90aGVyRW50aXR5KSA9PT0gbnVsbCkgLy8gbG9nICd0cnVlJ1xuICAgKiBgYGBcbiAgICovXG4gIGdldE9yTnVsbChlbnRpdHk6IEVudGl0eSk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB8IG51bGxcblxuICAvKipcbiAgICogQWRkIHRoZSBjdXJyZW50IGNvbXBvbmVudCB0byBhbiBlbnRpdHksIHRocm93IGFuIGVycm9yIGlmIHRoZSBjb21wb25lbnQgYWxyZWFkeSBleGlzdHMgKHVzZSBgY3JlYXRlT3JSZXBsYWNlYCBpbnN0ZWFkKS5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSB2YWwgVGhlIGluaXRpYWwgdmFsdWVcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSwgeyAuLi5UcmFuc2Zvcm0uZGVmYXVsdCgpLCBwb3NpdGlvbjoge3g6IDQsIHk6IDAsIHo6IDR9IH0pIC8vIG9rIVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KSAvLyB0aHJvdyBhbiBlcnJvciwgdGhlIGBUcmFuc2Zvcm1gIGNvbXBvbmVudCBhbHJlYWR5IGV4aXN0cyBpbiBgbXlFbnRpdHlgXG4gICAqIGBgYGBcbiAgICovXG4gIGNyZWF0ZShlbnRpdHk6IEVudGl0eSwgdmFsPzogQ29uc3RydWN0b3JUeXBlKTogQ29tcG9uZW50VHlwZTxUPlxuICAvKipcbiAgICogQWRkIHRoZSBjdXJyZW50IGNvbXBvbmVudCB0byBhbiBlbnRpdHkgb3IgcmVwbGFjZSB0aGUgY29udGVudCBpZiB0aGUgZW50aXR5IGFscmVhZHkgaGFzIHRoZSBjb21wb25lbnRcbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSB2YWwgVGhlIGluaXRpYWwgb3IgbmV3IHZhbHVlXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIG9rIVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlT3JSZXBsYWNlKG15RW50aXR5LCB7IC4uLlRyYW5zZm9ybS5kZWZhdWx0KCksIHBvc2l0aW9uOiB7eDogNCwgeTogMCwgejogNH0gfSkgLy8gb2shXG4gICAqIGBgYGBcbiAgICovXG4gIGNyZWF0ZU9yUmVwbGFjZShlbnRpdHk6IEVudGl0eSwgdmFsPzogQ29tcG9uZW50VHlwZTxUPik6IENvbXBvbmVudFR5cGU8VD5cblxuICAvKipcbiAgICogRGVsZXRlIHRoZSBjdXJyZW50IGNvbXBvbmVudCB0byBhbiBlbnRpdHksIHJldHVybiBudWxsIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjdXJyZW50IGNvbXBvbmVudC5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIG9rIVxuICAgKiBUcmFuc2Zvcm0uZGVsZXRlRnJvbShteUVudGl0eSkgLy8gcmV0dXJuIHRoZSBjb21wb25lbnRcbiAgICogVHJhbnNmb3JtLmRlbGV0ZUZyb20obXlFbnRpdHkpIC8vIHJldHVybiBudWxsXG4gICAqIGBgYGBcbiAgICovXG4gIGRlbGV0ZUZyb20oZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG11dGFibGUgY29tcG9uZW50IG9mIHRoZSBlbnRpdHksIHRocm93IGFuIGVycm9yIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KVxuICAgKiBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShteUVudGl0eSkucG9zaXRpb24gPSB7eDogNCwgeTogMCwgejogNH1cbiAgICogYGBgYFxuICAgKi9cbiAgZ2V0TXV0YWJsZShlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD5cblxuICAvKipcbiAgICogR2V0IHRoZSBtdXRhYmxlIGNvbXBvbmVudCBvZiB0aGUgZW50aXR5LCByZXR1cm4gbnVsbCBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwobXlFbnRpdHkpXG4gICAqIGlmICh0cmFuc2Zvcm0pIHtcbiAgICogICB0cmFuc2Zvcm0ucG9zaXRpb24gPSB7eDogNCwgeTogMCwgejogNH1cbiAgICogfVxuICAgKiBgYGBgXG4gICAqL1xuICBnZXRNdXRhYmxlT3JOdWxsKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHVwc2VydEZyb21CaW5hcnkoZW50aXR5OiBFbnRpdHksIGRhdGE6IEJ5dGVCdWZmZXIpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHVwZGF0ZUZyb21CaW5hcnkoZW50aXR5OiBFbnRpdHksIGRhdGE6IEJ5dGVCdWZmZXIpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8vIGFsbG9jYXRlcyBhIGJ1ZmZlciBhbmQgcmV0dXJucyBuZXcgYnVmZmVyXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKi9cbiAgdG9CaW5hcnkoZW50aXR5OiBFbnRpdHkpOiBCeXRlQnVmZmVyXG5cbiAgLy8gd3JpdGVzIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXJcbiAgd3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5OiBFbnRpdHksIGJ1ZmZlcjogQnl0ZUJ1ZmZlcik6IHZvaWRcblxuICAvKipcbiAgICogQGludGVybmFsIFVzZSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKENvbXBvbmVudCkgaW5zdGVhZC5cbiAgICogR2V0IHRoZSBpdGVyYXRvciB0byBldmVyeSBlbnRpdHkgaGFzIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGl0ZXJhdG9yKCk6IEl0ZXJhYmxlPFtFbnRpdHksIENvbXBvbmVudFR5cGU8VD5dPlxuXG4gIC8vIERpcnR5XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRpcnR5SXRlcmF0b3IoKTogSXRlcmFibGU8RW50aXR5PlxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjbGVhckRpcnR5KCk6IHZvaWRcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaXNEaXJ0eShlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudDxcbiAgVCBleHRlbmRzIElTY2hlbWEsXG4gIENvbnN0cnVjdG9yVHlwZSA9IENvbXBvbmVudFR5cGU8VD5cbj4oXG4gIGNvbXBvbmVudElkOiBudW1iZXIsXG4gIHNwZWM6IFQsXG4gIGNvbnN0cnVjdG9yRGVmYXVsdD86IENvbnN0cnVjdG9yVHlwZVxuICAvLyBtZXRhOiB7IHN5bmNGbGFncyB9XG4pOiBDb21wb25lbnREZWZpbml0aW9uPFQsIENvbnN0cnVjdG9yVHlwZT4ge1xuICBjb25zdCBkYXRhID0gbmV3IE1hcDxFbnRpdHksIENvbXBvbmVudFR5cGU8VD4+KClcbiAgY29uc3QgZGlydHlJdGVyYXRvciA9IG5ldyBTZXQ8RW50aXR5PigpXG5cbiAgY29uc3QgZGVmYXVsdEJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICBpZiAoY29uc3RydWN0b3JEZWZhdWx0KSB7XG4gICAgc3BlYy5zZXJpYWxpemUoY29uc3RydWN0b3JEZWZhdWx0LCBkZWZhdWx0QnVmZmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmIChjb25zdHJ1Y3RvckRlZmF1bHQpIHtcbiAgICAgIHJldHVybiBzcGVjLmRlc2VyaWFsaXplKFxuICAgICAgICBjcmVhdGVCeXRlQnVmZmVyKHtcbiAgICAgICAgICB3cml0aW5nOiB7XG4gICAgICAgICAgICBidWZmZXI6IGRlZmF1bHRCdWZmZXIuYnVmZmVyKCksXG4gICAgICAgICAgICBjdXJyZW50T2Zmc2V0OiBkZWZhdWx0QnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3BlYy5jcmVhdGUoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWZpbGxWYWx1ZSh2YWx1ZTogQ29uc3RydWN0b3JUeXBlKSB7XG4gICAgcmV0dXJuIHsgLi4uZ2V0RGVmYXVsdFZhbHVlKCksIC4uLnZhbHVlIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX2lkOiBjb21wb25lbnRJZCxcbiAgICBkZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKClcbiAgICB9LFxuICAgIGlzRGlydHk6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGRpcnR5SXRlcmF0b3IuaGFzKGVudGl0eSlcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZGF0YS5oYXMoZW50aXR5KVxuICAgIH0sXG4gICAgZGVsZXRlRnJvbTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgZGF0YS5kZWxldGUoZW50aXR5KVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudCB8fCBudWxsXG4gICAgfSxcbiAgICBnZXRPck51bGw6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5XG4gICAgKTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50ID8gZGVlcFJlYWRvbmx5KGNvbXBvbmVudCkgOiBudWxsXG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtnZXRGcm9tXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWVwUmVhZG9ubHkoY29tcG9uZW50KVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIHZhbHVlPzogQ29uc3RydWN0b3JUeXBlXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2NyZWF0ZV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gYWxyZWFkeSBleGlzdHNgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9XG4gICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0VmFsdWUoKSA6IHByZWZpbGxWYWx1ZSh2YWx1ZSlcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIHVzZWRWYWx1ZVxuICAgIH0sXG4gICAgY3JlYXRlT3JSZXBsYWNlOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIHZhbHVlPzogQ29uc3RydWN0b3JUeXBlXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCB1c2VkVmFsdWUgPVxuICAgICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZ2V0RGVmYXVsdFZhbHVlKCkgOiBwcmVmaWxsVmFsdWUodmFsdWUpXG4gICAgICBkYXRhLnNldChlbnRpdHksIHVzZWRWYWx1ZSEpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gdXNlZFZhbHVlIVxuICAgIH0sXG4gICAgZ2V0TXV0YWJsZU9yTnVsbDogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICAgIGdldE11dGFibGU6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICAgIGlmIChjb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbbXV0YWJsZV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgfSxcbiAgICBpdGVyYXRvcjogZnVuY3Rpb24qICgpOiBJdGVyYWJsZTxbRW50aXR5LCBDb21wb25lbnRUeXBlPFQ+XT4ge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5LCBjb21wb25lbnRdIG9mIGRhdGEpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgY29tcG9uZW50XVxuICAgICAgfVxuICAgIH0sXG4gICAgZGlydHlJdGVyYXRvcjogZnVuY3Rpb24qICgpOiBJdGVyYWJsZTxFbnRpdHk+IHtcbiAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGRpcnR5SXRlcmF0b3IpIHtcbiAgICAgICAgeWllbGQgZW50aXR5XG4gICAgICB9XG4gICAgfSxcbiAgICB0b0JpbmFyeShlbnRpdHk6IEVudGl0eSk6IEJ5dGVCdWZmZXIge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbdG9CaW5hcnldIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3cml0ZUJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgICAgc3BlYy5zZXJpYWxpemUoY29tcG9uZW50LCB3cml0ZUJ1ZmZlcilcbiAgICAgIHJldHVybiB3cml0ZUJ1ZmZlclxuICAgIH0sXG4gICAgd3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5OiBFbnRpdHksIGJ1ZmZlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbd3JpdGVUb0J5dGVCdWZmZXJdIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBzcGVjLnNlcmlhbGl6ZShjb21wb25lbnQsIGJ1ZmZlcilcbiAgICB9LFxuICAgIHVwZGF0ZUZyb21CaW5hcnkoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGJ1ZmZlcjogQnl0ZUJ1ZmZlclxuICAgICk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3VwZGF0ZUZyb21CaW5hcnldIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudXBzZXJ0RnJvbUJpbmFyeShlbnRpdHksIGJ1ZmZlcilcbiAgICB9LFxuICAgIHVwc2VydEZyb21CaW5hcnkoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGJ1ZmZlcjogQnl0ZUJ1ZmZlclxuICAgICk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3BlYy5kZXNlcmlhbGl6ZShidWZmZXIpXG4gICAgICBkYXRhLnNldChlbnRpdHksIG5ld1ZhbHVlKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjbGVhckRpcnR5OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkaXJ0eUl0ZXJhdG9yLmNsZWFyKClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5J1xuXG5leHBvcnQgbmFtZXNwYWNlIEVudGl0eVV0aWxzIHtcbiAgLyoqXG4gICAqIFJhbmdlIGlzIHRoZSBmaXJzdCBlbGVtZW50IGFuZCB0aGUgbGFzdCBwb3NzaWJsZSBlbGVtZW50LCB0aGV5IGJvdGggYXJlIGluY2x1ZGVkIGluIHRoZSBpbnRlcnZhbC5cbiAgICogW3N0YXJ0LCBlbmRdXG4gICAqL1xuICBleHBvcnQgdHlwZSBFbnRpdHlSYW5nZSA9IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl1cblxuICBleHBvcnQgY29uc3QgTUFYX0VOVElUSUVTID0gMHhmZmZmZmZmZlxuICBleHBvcnQgY29uc3QgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCA9IDEwMGUzXG4gIGV4cG9ydCBjb25zdCBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMgPSA1MTJcblxuICBleHBvcnQgY29uc3QgUkVTRVJWRURfRU5USVRJRVNfUkFOR0U6IEVudGl0eVJhbmdlID0gW1xuICAgIDAsXG4gICAgUkVTRVJWRURfU1RBVElDX0VOVElUSUVTIC0gMVxuICBdXG5cbiAgZXhwb3J0IGNvbnN0IFNUQVRJQ19FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgUkVTRVJWRURfU1RBVElDX0VOVElUSUVTLFxuICAgIERZTkFNSUNfRU5USVRJRVNfU1RBUlRfQVQgLSAxXG4gIF1cblxuICBleHBvcnQgY29uc3QgRFlOQU1JQ19FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCxcbiAgICBNQVhfRU5USVRJRVNcbiAgXVxuXG4gIGZ1bmN0aW9uIGlzSW5SYW5nZShlbnRpdHk6IEVudGl0eSwgcmFuZ2U6IEVudGl0eVJhbmdlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudGl0eSA+PSByYW5nZVswXSAmJiBlbnRpdHkgPD0gcmFuZ2VbMV1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICByZXR1cm4gaXNJblJhbmdlKGVudGl0eSwgRFlOQU1JQ19FTlRJVElFU19SQU5HRSlcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1N0YXRpY0VudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBTVEFUSUNfRU5USVRJRVNfUkFOR0UpXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNSZXNlcnZlZEVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBSRVNFUlZFRF9FTlRJVElFU19SQU5HRSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlVdGlsc1xuIiwiaW1wb3J0IHsgRW50aXR5VXRpbHMgfSBmcm9tICcuL2VudGl0eS11dGlscydcblxuZGVjbGFyZSBjb25zdCBlbnRpdHlTeW1ib2w6IHVuaXF1ZSBzeW1ib2xcbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFbnRpdHkgPSBudW1iZXIgJiB7IFtlbnRpdHlTeW1ib2xdOiB0cnVlIH1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGl0eUNvbnRhaW5lcigpIHtcbiAgY29uc3Qgc3RhdGljRW50aXR5ID0gRW50aXR5KEVudGl0eVV0aWxzLlNUQVRJQ19FTlRJVElFU19SQU5HRSlcbiAgY29uc3QgZHluYW1pY0VudGl0eSA9IEVudGl0eShFbnRpdHlVdGlscy5EWU5BTUlDX0VOVElUSUVTX1JBTkdFKVxuICByZXR1cm4ge1xuICAgIGdlbmVyYXRlRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSk6IEVudGl0eSB7XG4gICAgICBpZiAoZHluYW1pYykge1xuICAgICAgICByZXR1cm4gZHluYW1pY0VudGl0eS5nZW5lcmF0ZUVudGl0eSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RhdGljRW50aXR5LmdlbmVyYXRlRW50aXR5KClcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3RhdGljRW50aXR5LnJlbW92ZUVudGl0eShlbnRpdHkpIHx8IGR5bmFtaWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgICAgIClcbiAgICB9LFxuICAgIGlzRW50aXR5RXhpc3RzKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBFbnRpdHlVdGlscy5pc1Jlc2VydmVkRW50aXR5KGVudGl0eSkgfHxcbiAgICAgICAgc3RhdGljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKS5oYXMoZW50aXR5KSB8fFxuICAgICAgICBkeW5hbWljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKS5oYXMoZW50aXR5KVxuICAgICAgKVxuICAgIH0sXG4gICAgZ2V0RXhpc3RpbmdFbnRpdGllcygpOiBTZXQ8RW50aXR5PiB7XG4gICAgICByZXR1cm4gbmV3IFNldChbXG4gICAgICAgIC4uLnN0YXRpY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKCksXG4gICAgICAgIC4uLmR5bmFtaWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpXG4gICAgICBdKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHkocmFuZ2U6IEVudGl0eVV0aWxzLkVudGl0eVJhbmdlKSB7XG4gIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShlbnRpdHk6IG51bWJlcik6IEVudGl0eSB7XG4gICAgcmV0dXJuIGVudGl0eSBhcyBFbnRpdHlcbiAgfVxuXG4gIGxldCBlbnRpdHlDb3VudGVyID0gcmFuZ2VbMF1cbiAgY29uc3QgdXNlZEVudGl0aWVzOiBTZXQ8RW50aXR5PiA9IG5ldyBTZXQoKVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlRW50aXR5KCk6IEVudGl0eSB7XG4gICAgaWYgKGVudGl0eUNvdW50ZXIgPj0gcmFuZ2VbMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEl0IGZhaWxzIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBlbnRpdHkgb3V0IG9mIHJhbmdlIFske3JhbmdlWzBdfSwgJHtyYW5nZVsxXX1dLmBcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHkgPSBjcmVhdGVFbnRpdHkoZW50aXR5Q291bnRlcilcbiAgICBlbnRpdHlDb3VudGVyKytcblxuICAgIHVzZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuICAgIHJldHVybiBlbnRpdHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiB1c2VkRW50aXRpZXMuZGVsZXRlKGVudGl0eSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2V0RXhpc3RpbmdFbnRpdGllcygpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHVzZWRFbnRpdGllcylcbiAgICB9LFxuICAgIGdlbmVyYXRlRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eVxuICB9XG59XG4iLCIvKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlID0gKGR0OiBudW1iZXIpID0+IHZvaWRcblxuZXhwb3J0IGNvbnN0IFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSA9IDEwMGUzXG5cbnR5cGUgU3lzdGVtSXRlbSA9IHtcbiAgZm46IFVwZGF0ZVxuICBwcmlvcml0eTogbnVtYmVyXG4gIG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN5c3RlbUNvbnRhaW5lcigpIHtcbiAgY29uc3Qgc3lzdGVtczogU3lzdGVtSXRlbVtdID0gW11cblxuICBmdW5jdGlvbiBzb3J0KCkge1xuICAgIHN5c3RlbXMuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBhZGQoZm46IFVwZGF0ZSwgcHJpb3JpdHk6IG51bWJlciwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzeXN0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZm4gPT09IGZuKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gYWxyZWFkeSBhZGRlZCcpXG4gICAgfSBlbHNlIGlmIChuYW1lICYmIHN5c3RlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gbmFtZSBhbHJlYWR5IHVzZWQnKVxuICAgIH1cblxuICAgIHN5c3RlbXMucHVzaCh7XG4gICAgICBmbixcbiAgICAgIHByaW9yaXR5LFxuICAgICAgbmFtZVxuICAgIH0pXG4gICAgc29ydCgpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUoc2VsZWN0b3I6IHN0cmluZyB8IFVwZGF0ZSkge1xuICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgaW5kZXggPSBzeXN0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBzZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggPSBzeXN0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5mbiA9PT0gc2VsZWN0b3IpXG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgc29ydCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkLFxuICAgIHJlbW92ZSxcbiAgICBnZXRTeXN0ZW1zKCkge1xuICAgICAgcmV0dXJuIHN5c3RlbXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGRlZmluZVNka0NvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgU2NoZW1hcyB9IGZyb20gJy4uL3NjaGVtYXMnXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgUmVzdWx0LCBTcGVjIH0gZnJvbSAnLi4vc2NoZW1hcy9NYXAnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgY3JkdFNjZW5lU3lzdGVtIH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0J1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgQ29tcG9uZW50VHlwZSxcbiAgZGVmaW5lQ29tcG9uZW50IGFzIGRlZkNvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5Q29udGFpbmVyIH0gZnJvbSAnLi9lbnRpdHknXG5pbXBvcnQgeyBTeXN0ZW1Db250YWluZXIsIFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSwgVXBkYXRlIH0gZnJvbSAnLi9zeXN0ZW1zJ1xuaW1wb3J0IHR5cGUgeyBJRW5naW5lUGFyYW1zIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IElFbmdpbmUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgUmVhZG9ubHlDb21wb25lbnRTY2hlbWEgfSBmcm9tICcuL3JlYWRvbmx5J1xuXG5leHBvcnQgKiBmcm9tICcuL3JlYWRvbmx5J1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCB7IENvbXBvbmVudFR5cGUsIEVudGl0eSwgQnl0ZUJ1ZmZlciwgQ29tcG9uZW50RGVmaW5pdGlvbiB9XG5cbmZ1bmN0aW9uIHByZUVuZ2luZSgpIHtcbiAgY29uc3QgZW50aXR5Q29udGFpbmVyID0gRW50aXR5Q29udGFpbmVyKClcbiAgY29uc3QgY29tcG9uZW50c0RlZmluaXRpb24gPSBuZXcgTWFwPG51bWJlciwgQ29tcG9uZW50RGVmaW5pdGlvbjxhbnk+PigpXG4gIC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gbWFrZSB0aGlzIHdvcmsuXG4gIC8vIE1heWJlIGEgcHJveHkvY2FsbGJhY2sgdG8gYmUgdXAtdG8tZGF0ZVxuICBjb25zdCBlbnRpdGllc0NvbXBvbmVudCA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIFNldDxDb21wb25lbnREZWZpbml0aW9uPGFueT5bJ19pZCddPlxuICA+KClcbiAgY29uc3Qgc3lzdGVtcyA9IFN5c3RlbUNvbnRhaW5lcigpXG5cbiAgZnVuY3Rpb24gYWRkU3lzdGVtKFxuICAgIGZuOiBVcGRhdGUsXG4gICAgcHJpb3JpdHk6IG51bWJlciA9IFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSxcbiAgICBuYW1lPzogc3RyaW5nXG4gICkge1xuICAgIHN5c3RlbXMuYWRkKGZuLCBwcmlvcml0eSwgbmFtZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVN5c3RlbShzZWxlY3Rvcjogc3RyaW5nIHwgVXBkYXRlKSB7XG4gICAgcmV0dXJuIHN5c3RlbXMucmVtb3ZlKHNlbGVjdG9yKVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGVudGl0aWVzQ29tcG5vbmVudC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgY29uc3QgZW50aXR5ID0gZW50aXR5Q29udGFpbmVyLmdlbmVyYXRlRW50aXR5KGR5bmFtaWMpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRHluYW1pY0VudGl0eSgpIHtcbiAgICByZXR1cm4gYWRkRW50aXR5KHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBmb3IgKGNvbnN0IFssIGNvbXBvbmVudF0gb2YgY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGlmIChjb21wb25lbnQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHlDb250YWluZXIucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE8XG4gICAgVCBleHRlbmRzIElTY2hlbWEsXG4gICAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuICA+KFxuICAgIHNwZWM6IFQsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxULCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgICBpZiAoY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gYWxyZWFkeSBkZWNsYXJlZGApXG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbXBvbmVudCA9IGRlZkNvbXBvbmVudDxULCBDb25zdHJ1Y3RvclR5cGU+KFxuICAgICAgY29tcG9uZW50SWQsXG4gICAgICBzcGVjLFxuICAgICAgY29uc3RydWN0b3JEZWZhdWx0XG4gICAgKVxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLnNldChjb21wb25lbnRJZCwgbmV3Q29tcG9uZW50KVxuICAgIHJldHVybiBuZXdDb21wb25lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudDxcbiAgICBUIGV4dGVuZHMgU3BlYyxcbiAgICBDb25zdHJ1Y3RvclR5cGUgPSBQYXJ0aWFsPFJlc3VsdDxUPj5cbiAgPihcbiAgICBzcGVjOiBULFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uc3RydWN0b3JEZWZhdWx0PzogQ29uc3RydWN0b3JUeXBlXG4gICk6IENvbXBvbmVudERlZmluaXRpb248SVNjaGVtYTxSZXN1bHQ8VD4+LCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShcbiAgICAgIFNjaGVtYXMuTWFwKHNwZWMpLFxuICAgICAgY29tcG9uZW50SWQsXG4gICAgICBjb25zdHJ1Y3RvckRlZmF1bHRcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb21wb25lbnQ8VCBleHRlbmRzIElTY2hlbWE+KFxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKVxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb21wb25lbnQgbm90IGZvdW5kLiBZb3UgbmVlZCB0byBkZWNsYXJlIHRoZSBjb21wb25lbnRzIGF0IHRoZSBiZWdpbm5pZyBvZiB0aGUgZW5naW5lIGRlY2xhcmF0aW9uJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0RW50aXRpZXNXaXRoPFxuICAgIFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXVxuICA+KC4uLmNvbXBvbmVudHM6IFQpOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5SZWFkb25seUNvbXBvbmVudFNjaGVtYTxUPl0+IHtcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIC4uLmdyb3VwQ29tcF0gb2YgZ2V0Q29tcG9uZW50RGVmR3JvdXAoLi4uY29tcG9uZW50cykpIHtcbiAgICAgIHlpZWxkIFtlbnRpdHksIC4uLmdyb3VwQ29tcC5tYXAoKGMpID0+IGMuZ2V0KGVudGl0eSkpXSBhcyBbXG4gICAgICAgIEVudGl0eSxcbiAgICAgICAgLi4uUmVhZG9ubHlDb21wb25lbnRTY2hlbWE8VD5cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0Q29tcG9uZW50RGVmR3JvdXA8VCBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25bXT4oXG4gICAgLi4uYXJnczogVFxuICApOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5UXT4ge1xuICAgIGNvbnN0IFtmaXJzdENvbXBvbmVudERlZiwgLi4uY29tcG9uZW50RGVmaW5pdGlvbnNdID0gYXJnc1xuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZmlyc3RDb21wb25lbnREZWYuaXRlcmF0b3IoKSkge1xuICAgICAgbGV0IG1hdGNoZXMgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiBjb21wb25lbnREZWZpbml0aW9ucykge1xuICAgICAgICBpZiAoIWNvbXBvbmVudERlZi5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgLi4uYXJnc11cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTeXN0ZW1zKCkge1xuICAgIHJldHVybiBzeXN0ZW1zLmdldFN5c3RlbXMoKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbihjb21wb25lbnRJZDogbnVtYmVyKSB7XG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uZGVsZXRlKGNvbXBvbmVudElkKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRpdGllc0NvbXBvbmVudCxcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbixcbiAgICBhZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eSxcbiAgICByZW1vdmVFbnRpdHksXG4gICAgYWRkU3lzdGVtLFxuICAgIGdldFN5c3RlbXMsXG4gICAgcmVtb3ZlU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudCxcbiAgICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hLFxuICAgIGdldEVudGl0aWVzV2l0aCxcbiAgICBnZXRDb21wb25lbnQsXG4gICAgcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvblxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBQcmVFbmdpbmUgPSBSZXR1cm5UeXBlPHR5cGVvZiBwcmVFbmdpbmU+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gRW5naW5lKHsgdHJhbnNwb3J0cyB9OiBJRW5naW5lUGFyYW1zID0ge30pOiBJRW5naW5lIHtcbiAgY29uc3QgZW5naW5lID0gcHJlRW5naW5lKClcbiAgY29uc3QgY3JkdFN5c3RlbSA9IGNyZHRTY2VuZVN5c3RlbSh7IGVuZ2luZSwgdHJhbnNwb3J0czogdHJhbnNwb3J0cyB8fCBbXSB9KVxuICBjb25zdCBiYXNlQ29tcG9uZW50cyA9IGRlZmluZVNka0NvbXBvbmVudHMoZW5naW5lKVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZShkdDogbnVtYmVyKSB7XG4gICAgY3JkdFN5c3RlbS5yZWNlaXZlTWVzc2FnZXMoKVxuXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgZW5naW5lLmdldFN5c3RlbXMoKSkge1xuICAgICAgc3lzdGVtLmZuKGR0KVxuICAgIH1cblxuICAgIC8vIFNlbGVjdGVkIGNvbXBvbmVudHMgdGhhdCBvbmx5IGV4aXN0IG9uZSBmcmFtZVxuICAgIC8vICB0aGVuLCB0aGV5IGFyZSBkZWxldGVkIGJ1dCB0aGVpciBjcmR0IHN0YXRlIGtlZXBzXG4gICAgY29uc3QgcmVtb3ZlU2VsZWN0ZWRDb21wb25lbnRzID0gW1xuICAgICAgYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdCxcbiAgICAgIGJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG4gICAgXVxuICAgIGNvbnN0IGV4Y2x1ZGVDb21wb25lbnRJZHMgPSByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMubWFwKChpdGVtKSA9PiBpdGVtLl9pZClcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW5naW5lLmdldEVudGl0aWVzV2l0aChjb21wb25lbnREZWYpKSB7XG4gICAgICAgIGNvbXBvbmVudERlZi5kZWxldGVGcm9tKGVudGl0eSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBQZXJmIHRpcFxuICAgIC8vIFNob3VsZCB3ZSBhZGQgc29tZSBkaXJ0eUl0ZXJhdG9yU2V0IGF0IGVuZ2luZSBsZXZlbCBzbyB3ZSBkb250IGhhdmVcbiAgICAvLyB0byBpdGVyYXRlIGFsbCB0aGUgY29tcG9uZW50IGRlZmluaXRpb25zIHRvIGdldCB0aGUgZGlydHkgb25lcyA/XG4gICAgY29uc3QgZGlydHlTZXQgPSBuZXcgTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KClcbiAgICBmb3IgKGNvbnN0IFtjb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBpZiAoZXhjbHVkZUNvbXBvbmVudElkcy5pbmNsdWRlcyhjb21wb25lbnRJZCkpIGNvbnRpbnVlXG5cbiAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGRlZmluaXRpb24uZGlydHlJdGVyYXRvcigpKSB7XG4gICAgICAgIGlmICghZGlydHlTZXQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgICBkaXJ0eVNldC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgICAgIH1cbiAgICAgICAgZGlydHlTZXQuZ2V0KGVudGl0eSkhLmFkZChjb21wb25lbnRJZClcbiAgICAgIH1cbiAgICB9XG4gICAgY3JkdFN5c3RlbS5jcmVhdGVNZXNzYWdlcyhkaXJ0eVNldClcblxuICAgIGZvciAoY29uc3QgW19jb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmNsZWFyRGlydHkoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkRW50aXR5OiBlbmdpbmUuYWRkRW50aXR5LFxuICAgIGFkZER5bmFtaWNFbnRpdHk6IGVuZ2luZS5hZGREeW5hbWljRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eTogZW5naW5lLnJlbW92ZUVudGl0eSxcbiAgICBhZGRTeXN0ZW06IGVuZ2luZS5hZGRTeXN0ZW0sXG4gICAgcmVtb3ZlU3lzdGVtOiBlbmdpbmUucmVtb3ZlU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudDogZW5naW5lLmRlZmluZUNvbXBvbmVudCxcbiAgICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hOiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSxcbiAgICBnZXRFbnRpdGllc1dpdGg6IGVuZ2luZS5nZXRFbnRpdGllc1dpdGgsXG4gICAgZ2V0Q29tcG9uZW50OiBlbmdpbmUuZ2V0Q29tcG9uZW50LFxuICAgIHJlbW92ZUNvbXBvbmVudERlZmluaXRpb246IGVuZ2luZS5yZW1vdmVDb21wb25lbnREZWZpbml0aW9uLFxuICAgIHVwZGF0ZSxcbiAgICBiYXNlQ29tcG9uZW50c1xuICB9XG59XG4iLCIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGVudW0gRUNTQ29tcG9uZW50SURzIHtcblx0VHJhbnNmb3JtID0gMSxcblx0QW5pbWF0b3IgPSAxMDQyLFxuXHRBdWRpb1NvdXJjZSA9IDEwMjAsXG5cdEF2YXRhckF0dGFjaCA9IDEwNzMsXG5cdEF2YXRhck1vZGlmaWVyQXJlYSA9IDEwNzAsXG5cdEF2YXRhclNoYXBlID0gMTA4MCxcblx0QmlsbGJvYXJkID0gMTA5MCxcblx0Qm94U2hhcGUgPSAxMDEzLFxuXHRDYW1lcmFNb2RlID0gMTA3Mixcblx0Q2FtZXJhTW9kZUFyZWEgPSAxMDcxLFxuXHRDeWxpbmRlclNoYXBlID0gMTAxNixcblx0R0xURlNoYXBlID0gMTA0MSxcblx0TWF0ZXJpYWwgPSAxMDE3LFxuXHRNZXNoQ29sbGlkZXIgPSAxMDE5LFxuXHRNZXNoUmVuZGVyZXIgPSAxMDE4LFxuXHRORlRTaGFwZSA9IDEwNDAsXG5cdE9uUG9pbnRlckRvd24gPSAxMDYwLFxuXHRPblBvaW50ZXJEb3duUmVzdWx0ID0gMTA2Nixcblx0T25Qb2ludGVyVXAgPSAxMDYxLFxuXHRPblBvaW50ZXJVcFJlc3VsdCA9IDEwNjUsXG5cdFBsYW5lU2hhcGUgPSAxMDE0LFxuXHRQb2ludGVyTG9jayA9IDEwNzQsXG5cdFNwaGVyZVNoYXBlID0gMTAxNSxcblx0VGV4dFNoYXBlID0gMTAzMCxcblx0VWlUZXh0ID0gMTA1Mixcblx0VmlzaWJpbGl0eUNvbXBvbmVudCA9IDEwODEsXG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgRUNTQ29tcG9uZW50SURzIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbidcblxuY29uc3QgY29tcG9uZW50SWRzID0gT2JqZWN0LnZhbHVlcyhFQ1NDb21wb25lbnRJRHMpXG4gIC5maWx0ZXIoKGEpID0+IHR5cGVvZiBhID09PSAnbnVtYmVyJylcbiAgLm1hcChOdW1iZXIpXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICBpZiAodHlwZW9mIGRjbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmV3IHJwY1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgY3JlYXRlIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IHdpdGhvdXQgZ2xvYmFsIGRjbCBvYmplY3QnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICdyZW5kZXJlcidcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHNlbmQobWVzc2FnZTogVWludDhBcnJheSk6IHZvaWQge1xuICAgICAgLy8gVE9ETzogcmVwbGFjZSB3aXRoIG5ldyBycGNcbiAgICAgIGRjbFxuICAgICAgICAuY2FsbFJwYygnQGRlY2VudHJhbGFuZC9FeHBlcmltZW50YWxBUEknLCAnc2VuZFRvUmVuZGVyZXInLCBbXG4gICAgICAgICAgeyBkYXRhOiBuZXcgVWludDhBcnJheShtZXNzYWdlKSB9XG4gICAgICAgIF0pXG4gICAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgfSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSk6IGJvb2xlYW4ge1xuICAgICAgLy8gRWNobyBtZXNzYWdlLCBpZ25vcmUgdGhlbVxuICAgICAgaWYgKG1lc3NhZ2UudHJhbnNwb3J0VHlwZSA9PT0gdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzZW5kIHJlbmRlcmVyIGNvbXBvbmVudHMgKFByb3RvIEdlbmVyYXRlZClcbiAgICAgIGlmICghY29tcG9uZW50SWRzLmluY2x1ZGVzKG1lc3NhZ2UuY29tcG9uZW50SWQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFtZXNzYWdlXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV0d29ya1RyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAvLyBjb25zdCBycGMgPSBuZXcgUnBjVHJhbnNwb3J0KClcbiAgZnVuY3Rpb24gc2VuZCguLi5fYXJnczogYW55W10pIHtcbiAgICAvLyBjb25zb2xlLmxvZygnTmV0d29ya01lc3NhZ2UgU2VudDogJywgLi4uYXJncylcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSAnbmV0d29yay10cmFuc3BvcnQnXG4gIHJldHVybiB7XG4gICAgc2VuZCxcbiAgICB0eXBlLFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBTdGF0aWMgZW50aXRpZXMgJiBOZXR3b3JrIGNvbXBvbmVudHNcblxuICAgICAgcmV0dXJuICEhbWVzc2FnZSAvLyB2YWxpZENvbXBvbmVudHMuaW5jbHVkZXMoY29tcG9uZW50SWQpXG4gICAgfVxuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkBkY2wvcG9zaXhcIiAvPlxuXG4vKipcbiAqIEBhbHBoYSAqIFRoaXMgZmlsZSBpbml0aWFsaXphdGlvbiBpcyBhbiBhbHBoYSBvbmUuIFRoaXMgaXMgYmFzZWQgb24gdGhlIG9sZC1lY3NcbiAqIGluaXQgYW5kIGl0J2xsIGJlIGNoYW5naW5nLlxuICovXG5cbmltcG9ydCB7IEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSdcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0L3RyYW5zcG9ydHMvcmVuZGVyZXJUcmFuc3BvcnQnXG5pbXBvcnQgeyBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0IH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0L3RyYW5zcG9ydHMvbmV0d29ya1RyYW5zcG9ydCdcblxuY29uc3QgcmVuZGVyZXJUcmFuc3BvcnQgPSBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCgpXG5leHBvcnQgY29uc3QgZW5naW5lID0gRW5naW5lKHtcbiAgdHJhbnNwb3J0czogW3JlbmRlcmVyVHJhbnNwb3J0LCBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCldXG59KVxuXG5pZiAodHlwZW9mIGRjbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZGNsLmxvYWRNb2R1bGUoJ0BkZWNlbnRyYWxhbmQvRXhwZXJpbWVudGFsQVBJJywge30pLmNhdGNoKGRjbC5lcnJvcilcblxuICBhc3luYyBmdW5jdGlvbiBwdWxsUmVuZGVyZXJNZXNzYWdlcygpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRjbC5jYWxsUnBjKFxuICAgICAgJ0BkZWNlbnRyYWxhbmQvRXhwZXJpbWVudGFsQVBJJyxcbiAgICAgICdtZXNzYWdlRnJvbVJlbmRlcmVyJyxcbiAgICAgIFtdXG4gICAgKVxuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgaWYgKHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGJ5dGVBcnJheSBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgcmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKGJ5dGVBcnJheSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRjbC5vblVwZGF0ZSgoZHQ6IG51bWJlcikgPT4ge1xuICAgIHB1bGxSZW5kZXJlck1lc3NhZ2VzKClcbiAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgICAuZmluYWxseSgoKSA9PiBlbmdpbmUudXBkYXRlKGR0KSlcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGxvZyA9IGRjbC5sb2dcbmV4cG9ydCBjb25zdCBlcnJvciA9IGRjbC5lcnJvclxuIiwiaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcydcblxuLyoqXG4gKiBUcmFuc2Zvcm0gcGFyZW50aW5nOiBjeWNsaWMgZGVwZW5kZW5jeSBjaGVja2VyXG4gKiBJdCBjaGVja3Mgb25seSBpbiBtb2RpZmllZCBUcmFuc2Zvcm1zXG4gKlxuICogQWRkIHRoaXMgc3lzdGVtIHdpdGg6XG4gKiBgYGB0c1xuICogIGVuZ2luZS5hZGRTeXN0ZW0oY3ljbGljUGFyZW50aW5nQ2hlY2tlcihlbmdpbmUpKVxuICogYGBgYFxuICogQW5kIHRoZW4gaXQgd2lsbCBjaGVjayBldmVyeSB0aWNrIHRoZSBwYXJlbnRpbmcuXG4gKlxuICogQHB1YmxpY1xuICpcbiAqIEBwYXJhbXMgZW5naW5lXG4gKiBAcmV0dXJucyBhIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3ljbGljUGFyZW50aW5nQ2hlY2tlcihlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIFRyYW5zZm9ybS5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgIGxldCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgIHdoaWxlICh0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtLnBhcmVudCkge1xuICAgICAgICBpZiAodHJhbnNmb3JtLnBhcmVudCA9PT0gZW50aXR5KSB7XG4gICAgICAgICAgZGNsLmVycm9yKGBUaGVyZSBpcyBhIGN5Y2xpYyBwYXJlbnQgd2l0aCBlbnRpdHkgJHtlbnRpdHl9YClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPck51bGwodHJhbnNmb3JtLnBhcmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBUcmFuc2Zvcm0gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVHJhbnNmb3JtXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEFuaW1hdG9yID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkFuaW1hdG9yXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhckF0dGFjaCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJBdHRhY2hcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXZhdGFyTW9kaWZpZXJBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhck1vZGlmaWVyQXJlYVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQmlsbGJvYXJkXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJveFNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlQXJlYSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlQXJlYVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkN5bGluZGVyU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBNYXRlcmlhbCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NYXRlcmlhbFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBNZXNoQ29sbGlkZXIgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWVzaENvbGxpZGVyXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgTkZUU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTkZUU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93biA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgUG9pbnRlckxvY2sgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckxvY2tcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgU3BoZXJlU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuU3BoZXJlU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBVaVRleHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUZXh0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVmlzaWJpbGl0eUNvbXBvbmVudFxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcbi8qKiBAcHVibGljICovXG5leHBvcnQgbmFtZXNwYWNlIENvbXBvbmVudHMge1xuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJBdHRhY2ggPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyQXR0YWNoXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQmlsbGJvYXJkID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJpbGxib2FyZFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQ2FtZXJhTW9kZUFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZUFyZWFcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTWF0ZXJpYWwgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWF0ZXJpYWxcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoQ29sbGlkZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE5GVFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk5GVFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25cblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyVXAgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJMb2NrXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5TcGhlcmVTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVWlUZXh0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlVpVGV4dFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5WaXNpYmlsaXR5Q29tcG9uZW50XG59XG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwidGhpcyIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwiZ2xvYmFsIiwiX20wIiwiQ09NUE9ORU5UX0lEIiwiZ2xvYmFsVGhpcyIsIkxvbmciLCJBbmltYXRvclNjaGVtYS5BbmltYXRvclNjaGVtYSIsIkFuaW1hdG9yU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hIiwiQXVkaW9Tb3VyY2VTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXZhdGFyQXR0YWNoU2NoZW1hLkF2YXRhckF0dGFjaFNjaGVtYSIsIkF2YXRhckF0dGFjaFNjaGVtYS5DT01QT05FTlRfSUQiLCJBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hIiwiQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF2YXRhclNoYXBlU2NoZW1hLkF2YXRhclNoYXBlU2NoZW1hIiwiQXZhdGFyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQmlsbGJvYXJkU2NoZW1hLkJpbGxib2FyZFNjaGVtYSIsIkJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQiLCJCb3hTaGFwZVNjaGVtYS5Cb3hTaGFwZVNjaGVtYSIsIkJveFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkNhbWVyYU1vZGVTY2hlbWEuQ2FtZXJhTW9kZVNjaGVtYSIsIkNhbWVyYU1vZGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEiLCJDYW1lcmFNb2RlQXJlYVNjaGVtYS5DT01QT05FTlRfSUQiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkdMVEZTaGFwZVNjaGVtYS5HTFRGU2hhcGVTY2hlbWEiLCJHTFRGU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEiLCJNYXRlcmlhbFNjaGVtYS5DT01QT05FTlRfSUQiLCJNZXNoQ29sbGlkZXJTY2hlbWEuTWVzaENvbGxpZGVyU2NoZW1hIiwiTWVzaENvbGxpZGVyU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEiLCJNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTkZUU2hhcGVTY2hlbWEuTkZUU2hhcGVTY2hlbWEiLCJORlRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJEb3duU2NoZW1hLk9uUG9pbnRlckRvd25TY2hlbWEiLCJPblBvaW50ZXJEb3duU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYSIsIk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyVXBTY2hlbWEuT25Qb2ludGVyVXBTY2hlbWEiLCJPblBvaW50ZXJVcFNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5PblBvaW50ZXJVcFJlc3VsdFNjaGVtYSIsIk9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlBsYW5lU2hhcGVTY2hlbWEuUGxhbmVTaGFwZVNjaGVtYSIsIlBsYW5lU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUG9pbnRlckxvY2tTY2hlbWEuUG9pbnRlckxvY2tTY2hlbWEiLCJQb2ludGVyTG9ja1NjaGVtYS5DT01QT05FTlRfSUQiLCJTcGhlcmVTaGFwZVNjaGVtYS5TcGhlcmVTaGFwZVNjaGVtYSIsIlNwaGVyZVNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlRleHRTaGFwZVNjaGVtYS5UZXh0U2hhcGVTY2hlbWEiLCJUZXh0U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiVWlUZXh0U2NoZW1hLlVpVGV4dFNjaGVtYSIsIlVpVGV4dFNjaGVtYS5DT01QT05FTlRfSUQiLCJWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEiLCJWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlNjaGVtYXMiLCJpSW50NjQiLCJXaXJlTWVzc2FnZSIsImNyZHRQcm90b2NvbCIsIk1lc3NhZ2UiLCJkZWZDb21wb25lbnQiLCJkZWZpbmVDb21wb25lbnQiLCJDb21wb25lbnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztHQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0dBQzlELE9BQWtCLENBQUEsT0FBQSxHQUFBLEtBQUssQ0FBQyxDQUFDO0dBS3pCLENBQUMsVUFBVSxPQUFPLEVBQUU7Q0FDcEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLE1BQU07Q0FDbkI7Q0FDQTtDQUNBO09BQ0ksQ0FBQyxHQUFHLENBQUM7Q0FDVDtDQUNBO0NBQ0E7T0FDSSxDQUFDLEdBQUcsQ0FBQztDQUNUO0NBQ0E7Q0FDQTtPQUNJLENBQUMsR0FBRyxDQUFDLEVBQUU7V0FDSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QjtDQUNMLE1BQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0NBQ25DLFVBQVEsT0FBTztlQUNILENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2VBQ3hCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2VBQ3hCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ3BDLFdBQVMsQ0FBQztRQUNMO0NBQ0wsTUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUN0QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRTtDQUMzQyxVQUFRLE9BQU87ZUFDSCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztlQUMzQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztlQUMzQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztDQUN2QyxXQUFTLENBQUM7UUFDTDtDQUNMLE1BQUksT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDaEM7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtXQUNoRCxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztXQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztXQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QztDQUNMLE1BQUksT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Q0FDMUM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtXQUNyQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRDtDQUNMLE1BQUksT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDaEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7Q0FDaEMsVUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7Q0FDMUIsVUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7Q0FDMUIsVUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckI7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3hCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUU7V0FDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQztDQUNMLE1BQUksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFO0NBQzVCLFVBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckY7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUU7V0FDM0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRTtDQUNMLE1BQUksT0FBTyxDQUFD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QyxFQUFFO1dBQ3ZCLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztXQUMzQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNqRDtDQUNBLFVBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsVUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QyxVQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVDLFVBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM3QztDQUNBLFVBQVEsT0FBTztDQUNmLGNBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZELGNBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZELGNBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZELFdBQVMsQ0FB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QUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUMsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiO2dCQUNJO0NBQ2I7ZUFDWSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQy9DLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUNuRixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEY7Q0FDVCxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQyxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQyxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQztDQUNBLFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQzNDLE9BQU8sR0FBRyxDQUFDO1FBQ2Q7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0NBQ3pDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDakU7Q0FDQSxVQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7Q0FDdEMsVUFBUSxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ2xDLFVBQVEsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztXQUM1QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQy9CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDN0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUM5QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQy9CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDN0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUN0QyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDMUM7Q0FDTCxNQUFJLFVBQVUsQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztDQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7Q0FDckQsVUFBUSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQy9CO1dBQ1EsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdB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QTtPQUNJLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO0NBQzdDLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakYsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xGLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakYsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFO0NBQ0wsTUFBSSxVQUFVLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztDQUM3QyxNQUFJLFNBQVMsU0FBUyxDQUFDLE9B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QUFDO0FBQ2pDO1VBQ1EsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNwRCxhQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Y0FDYixHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCO0FBQ1Q7VUFDUSxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3BELGFBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUNiLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtDQUNBO1VBQ1EsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7Q0FDL0U7VUFDUSxPQUFPLENBQUMsYUFBYSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUMvRTtDQUNBLFNBQVEsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO2NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcs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QUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztDQUNsQyxXQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFO2VBQ2xCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDO2VBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRTtDQUN0RyxjQUFZLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztlQUNyRCxFQUFFLENBQUMsQ0FBQztlQUNKLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0NBQ25ELGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ25ELGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO2VBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ25ELFdBQVMsTUFBTTtlQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0NBQ25ELGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcs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QUMvQyxNQUFLLENBQUM7Q0FDTixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sR0FBRztNQUMxQyxPQUFPLE1BQU0sQ0FBQyxZQUFZO0NBQzlCLFNBQVEsSUFBSSxDQUFDLEVBQUUsVUFBVSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Q0FDdEIsU0FBUSxJQUFJLENBQUMsRUFBRSxVQUFVLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUN0QixNQUFLLENBQUM7Q0FDTixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztNQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztNQUMzQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0NBQzlELEtBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMsQ0FBQztNQUMxRCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FB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LEVBQXlCLENBQUM7QUFDMUM7Q0FDQSxDQUFBLElBQUksWUFBWSxDQUFDO0FBQ2pCO0NBQ0EsQ0FBQSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUTtDQUM3QixLQUFJLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTTtDQUMzQixLQUFJLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztHQUNsQjtBQUNEO0NBQ0E7RUFDQSxTQUFTLElBQUksR0FBRyxFQUFFO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUN2QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FD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QUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztDQUMvRyxTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztDQUMvRyxTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztDQUMvRyxTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMvRztDQUNBO1VBQ1EsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7Q0FDeEMsYUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDaEMsYUFBWSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDbkM7VUFDRCxPQUFPLEtBQUssQ0FBQztDQUNyQixNQUFLLENBQUM7Q0FDTixFQUFDLEdBQUcsQ0FBQztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsVUFBVSxHQUFHO0NBQy9DLEtBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzdCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsV0FBVyxHQUFHO0NBQ2pELEtBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQzlCLEtBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQyxFQUFDLENBQUM7QUFDRjtDQUNBO0FBQ0E7Q0FDQSxDQUFBLFNBQVMsY0FBYyxHQUFHO0NBQzFCO01BQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFO0NBQ2pDLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCO2NBQ1ksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDaEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQzFCLE9BQU8sSUFBSSxDQUFDO1dBQ25CO0NBQ1Q7VUFDUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzdELElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDN0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Y0FDMUIsT0FBTyxJQUFJLENBQUM7VUFDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNkLE1BQUssTUFBTTtDQUNYLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCO0NBQ0EsYUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUc7Q0FDcEMsaUJBQWdCLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVDO2NBQ1ksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDaEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQzFCLE9BQU8sSUFBSSxDQUFDO1dBQ25CO0NBQ1Q7VUFDUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FB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QUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO0NBQ2hvQyxJQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztHQUNsQixDQUFDLE9BQU8sQ0FBQyxFQUFFO0NBQ1o7R0FDQztBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFF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QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztNQUMvQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUM1QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNsQztDQUNBLEtBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7TUFDakIsR0FBRyxJQUFJLE1BQU0sQ0FBQztNQUNkLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDekUsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxhQUFhLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxDQUFDLFVBQVUsRUFBRTtDQUN2RCxLQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0NB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O01BQ2pDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO01BQ25DLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2hDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3RDO0NBQ0EsS0FBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDM0MsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENB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QUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQTtDQUNyQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0NBQzlCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Q0FDbkMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDNUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTthQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ3BFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7YUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNwRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2FBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDbkUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUFFO0NBQzdDLFlBQUEsTUFB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QzNCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0NBQzNDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7YUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNsRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO2FBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDckUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTthQUMvQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ2pFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7YUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNsRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO0NBQzFCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxD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QUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO0NBQ3BDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUMvQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDNUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtDQUN0QyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUMvQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO0NBQ3ZDLFlBQUEsTUFBTSxDQUFDLE1B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Q1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2pDO1NBQ0QsV0FBVyxHQUFBO2FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2pDO1NBQ0QsUUFBUSxHQUFBO2FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQzlCO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQy9CO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQy9CO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2xDO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQy9CO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2hDO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2hDO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ25DO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUN2QyxZQUFBLE9BQU8sTUFBTSxD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
|
9748
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvVmVjdG9yMy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvU2NhbGFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvZWNzLW1hdGgvZGlzdC90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvUXVhdGVybmlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGNsL2Vjcy1tYXRoL2Rpc3QvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvYXNwcm9taXNlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL2Jhc2U2NC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy9ldmVudGVtaXR0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvZmxvYXQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQHByb3RvYnVmanMvaW5xdWlyZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcHJvdG9idWZqcy91dGY4L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwcm90b2J1ZmpzL3Bvb2wvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvdXRpbC9sb25nYml0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm90b2J1ZmpzL3NyYy91dGlsL21pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvd3JpdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3dyaXRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcmVhZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3JlYWRlcl9idWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjL3NlcnZpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9zcmMvcnBjLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL3Jvb3RzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb3RvYnVmanMvc3JjL2luZGV4LW1pbmltYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvdG9idWZqcy9taW5pbWFsLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0FuaW1hdG9yLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BbmltYXRvci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQXVkaW9Tb3VyY2UuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F1ZGlvU291cmNlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9BdmF0YXJBdHRhY2guZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0F2YXRhckF0dGFjaC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvY29tbW9uL1ZlY3RvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbi50cyIsIi4uL25vZGVfbW9kdWxlcy9sb25nL3NyYy9sb25nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL2NvbW1vbi9Db2xvcjMuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0F2YXRhclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9BdmF0YXJTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQmlsbGJvYXJkLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9CaWxsYm9hcmQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL0JveFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Cb3hTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvQ2FtZXJhTW9kZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvQ2FtZXJhTW9kZUFyZWEuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0NhbWVyYU1vZGVBcmVhLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9DeWxpbmRlclNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9HTFRGU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL0dMVEZTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWF0ZXJpYWwuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01hdGVyaWFsLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9NZXNoQ29sbGlkZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL01lc2hDb2xsaWRlci5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9NZXNoUmVuZGVyZXIuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL05GVFNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9ORlRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93bi5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyRG93blJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvT25Qb2ludGVyVXAuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL09uUG9pbnRlclVwLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9PblBvaW50ZXJVcFJlc3VsdC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvT25Qb2ludGVyVXBSZXN1bHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1BsYW5lU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1BvaW50ZXJMb2NrLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9Qb2ludGVyTG9jay5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvU3BoZXJlU2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1NwaGVyZVNoYXBlLmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9wYi9UZXh0U2hhcGUuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1RleHRTaGFwZS5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvcGIvVWlUZXh0Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2dlbmVyYXRlZC9VaVRleHQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL3BiL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL1Zpc2liaWxpdHlDb21wb25lbnQuZ2VuLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2luZGV4Lmdlbi50cyIsIi4uL3NyYy9jb21wb25lbnRzL2xlZ2FjeS9UcmFuc2Zvcm0udHMiLCIuLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyIsIi4uL3NyYy9zY2hlbWFzL0FycmF5LnRzIiwiLi4vc3JjL3NjaGVtYXMvYmFzaWMvQm9vbGVhbi50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0VudW0udHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9GbG9hdC50cyIsIi4uL3NyYy9zY2hlbWFzL2Jhc2ljL0ludGVnZXIudHMiLCIuLi9zcmMvc2NoZW1hcy9iYXNpYy9TdHJpbmcudHMiLCIuLi9zcmMvc2NoZW1hcy9NYXAudHMiLCIuLi9zcmMvc2NoZW1hcy9PcHRpb25hbC50cyIsIi4uL3NyYy9zY2hlbWFzL2luZGV4LnRzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvY3JkdC9kaXN0L3R5cGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BkY2wvY3JkdC9kaXN0L2luZGV4LmpzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlci9pbmRleC50cyIsIi4uL3NyYy9zZXJpYWxpemF0aW9uL3dpcmVNZXNzYWdlLnRzIiwiLi4vc3JjL3NlcmlhbGl6YXRpb24vY3JkdC9jb21wb25lbnRPcGVyYXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jcmR0L2luZGV4LnRzIiwiLi4vc3JjL2VuZ2luZS9yZWFkb25seS50cyIsIi4uL3NyYy9lbmdpbmUvY29tcG9uZW50LnRzIiwiLi4vc3JjL2VuZ2luZS9lbnRpdHktdXRpbHMudHMiLCIuLi9zcmMvZW5naW5lL2VudGl0eS50cyIsIi4uL3NyYy9lbmdpbmUvc3lzdGVtcy50cyIsIi4uL3NyYy9lbmdpbmUvaW5kZXgudHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbi50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyIsIi4uL3NyYy9zeXN0ZW1zL2NyZHQvdHJhbnNwb3J0cy9uZXR3b3JrVHJhbnNwb3J0LnRzIiwiLi4vc3JjL3J1bnRpbWUvaW5pdGlhbGl6YXRpb24udHMiLCIuLi9zcmMvc3lzdGVtcy9jeWNsaWNQYXJlbnRpbmdDaGVja2VyLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZ2VuZXJhdGVkL2dsb2JhbC5nZW4udHMiLCIuLi9zcmMvY29tcG9uZW50cy9nZW5lcmF0ZWQvZ2xvYmFsLm5hbWVzcGFjZS5nZW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlZlY3RvcjMgPSB2b2lkIDA7XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFZlY3RvcjM7XG4oZnVuY3Rpb24gKFZlY3RvcjMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IFZlY3RvcjMgb2JqZWN0IGZyb20gdGhlIGdpdmVuIHgsIHksIHogKGZsb2F0cykgY29vcmRpbmF0ZXMuXG4gICAgICogQHBhcmFtIHggLSBkZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvb3JkaW5hdGVzIChvbiBZIGF4aXMpXG4gICAgICogQHBhcmFtIHogLSBkZWZpbmVzIHRoZSB0aGlyZCBjb29yZGluYXRlcyAob24gWiBheGlzKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZShcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBmaXJzdCBjb29yZGluYXRlcyAob24gWCBheGlzKVxuICAgICAqL1xuICAgIHggPSAwLCBcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzZWNvbmQgY29vcmRpbmF0ZXMgKG9uIFkgYXhpcylcbiAgICAgKi9cbiAgICB5ID0gMCwgXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdGhpcmQgY29vcmRpbmF0ZXMgKG9uIFogYXhpcylcbiAgICAgKi9cbiAgICB6ID0gMCkge1xuICAgICAgICByZXR1cm4geyB4LCB5LCB6IH07XG4gICAgfVxuICAgIFZlY3RvcjMuY3JlYXRlID0gY3JlYXRlO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHBhcmFtIHZlY3RvcjEgLSB0aGUgZmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHZlY3RvcjIgLSB0aGUgc2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgdmVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkKHZlY3RvcjEsIHZlY3RvcjIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHZlY3RvcjEueCArIHZlY3RvcjIueCxcbiAgICAgICAgICAgIHk6IHZlY3RvcjEueSArIHZlY3RvcjIueSxcbiAgICAgICAgICAgIHo6IHZlY3RvcjEueiArIHZlY3RvcjIuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLmFkZCA9IGFkZDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgYXMgdGhlIHJlc3VsdCBvZiB0aGUgc3Vic3RyYWN0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gdmVjdG9ycy5cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueCxcbiAgICAgICAgICAgIHk6IG1pbnVlbmQueSAtIHN1YnRyYWhlbmQueSxcbiAgICAgICAgICAgIHo6IG1pbnVlbmQueiAtIHN1YnRyYWhlbmQuelxuICAgICAgICB9O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGFzIHRoZSByZXN1bHQgb2YgdGhlIHN1YnN0cmFjdGlvbiBvZiB0aGUgdHdvIGdpdmVuIHZlY3RvcnMuXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdWJ0cmFjdFRvUmVmKG1pbnVlbmQsIHN1YnRyYWhlbmQsIHJlc3VsdCkge1xuICAgICAgICByZXN1bHQueCA9IG1pbnVlbmQueCAtIHN1YnRyYWhlbmQueDtcbiAgICAgICAgcmVzdWx0LnkgPSBtaW51ZW5kLnkgLSBzdWJ0cmFoZW5kLnk7XG4gICAgICAgIHJlc3VsdC56ID0gbWludWVuZC56IC0gc3VidHJhaGVuZC56O1xuICAgIH1cbiAgICBWZWN0b3IzLnN1YnRyYWN0VG9SZWYgPSBzdWJ0cmFjdFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyB3aXRoIHRoZSBvdGhlciBzaWduXG4gICAgICogQHJldHVybnMgdGhlIHJlc3VsdGluZyB2ZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcHBvc2l0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4geyB4OiAtdmFsdWUueCwgeTogLXZhbHVlLnksIHo6IC12YWx1ZS56IH07XG4gICAgfVxuICAgIFZlY3RvcjMub3Bwb3NpdGUgPSBvcHBvc2l0ZTtcbiAgICAvKipcbiAgICAgKiBDb3B5IHNvdXJjZSBpbnRvIGRlc3RcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHkoc291cmNlLCBkZXN0KSB7XG4gICAgICAgIGRlc3QueCA9IHNvdXJjZS54O1xuICAgICAgICBkZXN0LnkgPSBzb3VyY2UueTtcbiAgICAgICAgZGVzdC56ID0gc291cmNlLno7XG4gICAgfVxuICAgIFZlY3RvcjMuY29weSA9IGNvcHk7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHdpdGggdGhlIHNhbWUgdmFsdWVcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHZlY3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlKTtcbiAgICB9XG4gICAgVmVjdG9yMy5jbG9uZSA9IGNsb25lO1xuICAgIC8vIFByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBWZWN0bzNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQodmVjdG9yLnggKiB2ZWN0b3IueCArIHZlY3Rvci55ICogdmVjdG9yLnkgKyB2ZWN0b3IueiAqIHZlY3Rvci56KTtcbiAgICB9XG4gICAgVmVjdG9yMy5sZW5ndGggPSBsZW5ndGg7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgdGhlIFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyBzcXVhcmVkIGxlbmd0aCBvZiB0aGUgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiB2ZWN0b3IueCAqIHZlY3Rvci54ICsgdmVjdG9yLnkgKiB2ZWN0b3IueSArIHZlY3Rvci56ICogdmVjdG9yLno7XG4gICAgfVxuICAgIFZlY3RvcjMubGVuZ3RoU3F1YXJlZCA9IGxlbmd0aFNxdWFyZWQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB3aXRoIHRoZSBjdXJyZW50IFZlY3RvcjMgY29vcmRpbmF0ZXMgbXVsdGlwbGllZCBieSB0aGUgZmxvYXQgXCJzY2FsZVwiXG4gICAgICogQHBhcmFtIHNjYWxlIC0gZGVmaW5lcyB0aGUgbXVsdGlwbGllciBmYWN0b3JcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2NhbGVUb1JlZih2ZWN0b3IsIHNjYWxlLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSB2ZWN0b3IueCAqIHNjYWxlO1xuICAgICAgICByZXN1bHQueSA9IHZlY3Rvci55ICogc2NhbGU7XG4gICAgICAgIHJlc3VsdC56ID0gdmVjdG9yLnogKiBzY2FsZTtcbiAgICB9XG4gICAgVmVjdG9yMy5zY2FsZVRvUmVmID0gc2NhbGVUb1JlZjtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHdpdGggdGhlIGN1cnJlbnQgVmVjdG9yMyBjb29yZGluYXRlcyBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdCBcInNjYWxlXCJcbiAgICAgKiBAcGFyYW0gc2NhbGUgLSBkZWZpbmVzIHRoZSBtdWx0aXBsaWVyIGZhY3RvclxuICAgICAqIEByZXR1cm5zIGEgbmV3IFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzY2FsZSh2ZWN0b3IsIHNjYWxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGUodmVjdG9yLnggKiBzY2FsZSwgdmVjdG9yLnkgKiBzY2FsZSwgdmVjdG9yLnogKiBzY2FsZSk7XG4gICAgfVxuICAgIFZlY3RvcjMuc2NhbGUgPSBzY2FsZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aCh2ZWN0b3IsIGxlbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCk7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbiwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoID0gbm9ybWFsaXplRnJvbUxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMyB3aXRoIHRoZSBnaXZlbiBpbnB1dCBsZW5ndGguXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0gbGVuIC0gdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgdXBkYXRlZCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplRnJvbUxlbmd0aFRvUmVmKHZlY3RvciwgbGVuLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCB8fCBsZW4gPT09IDEuMCkge1xuICAgICAgICAgICAgY29weSh2ZWN0b3IsIHJlc3VsdCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2NhbGVUb1JlZih2ZWN0b3IsIDEuMCAvIGxlbiwgcmVzdWx0KTtcbiAgICB9XG4gICAgVmVjdG9yMy5ub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWYgPSBub3JtYWxpemVGcm9tTGVuZ3RoVG9SZWY7XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIHRoZSBjdXJyZW50IFZlY3RvcjMuXG4gICAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGFuIGluIHBsYWNlIG9wZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUodmVjdG9yKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVGcm9tTGVuZ3RoKHZlY3RvciwgbGVuZ3RoKHZlY3RvcikpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBOb3JtYWxpemUgdGhlIGN1cnJlbnQgVmVjdG9yMy5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgYW4gaW4gcGxhY2Ugb3BlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHVwZGF0ZWQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVRvUmVmKHZlY3RvciwgcmVzdWx0KSB7XG4gICAgICAgIG5vcm1hbGl6ZUZyb21MZW5ndGhUb1JlZih2ZWN0b3IsIGxlbmd0aCh2ZWN0b3IpLCByZXN1bHQpO1xuICAgIH1cbiAgICBWZWN0b3IzLm5vcm1hbGl6ZVRvUmVmID0gbm9ybWFsaXplVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZG90IHByb2R1Y3QgKGZsb2F0KSBiZXR3ZWVuIHRoZSB2ZWN0b3JzIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcmV0dXJucyB0aGUgZG90IHByb2R1Y3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb3QobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcbiAgICB9XG4gICAgVmVjdG9yMy5kb3QgPSBkb3Q7XG4gICAgLyoqXG4gICAgICogUm90YXRlcyBjdXJyZW50IFZlY3RvcjMgYmFzZWQgb24gdGhlIGdpdmVuIHF1YXRlcm5pb24sIGJ1dCBhcHBsaWVzIHRoZSByb3RhdGlvbiB0byB0YXJnZXQgVmVjdG9yMy5cbiAgICAgKiBAcGFyYW0gcSAtIGRlZmluZXMgdGhlIFF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgdGFyZ2V0IFZlY3RvcjNcbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRlKHZlY3RvciwgcSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHogfSA9IHZlY3RvcjtcbiAgICAgICAgY29uc3QgeyB4OiBxeCwgeTogcXksIHo6IHF6LCB3OiBxdyB9ID0gcTtcbiAgICAgICAgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcbiAgICAgICAgY29uc3QgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gICAgICAgIGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICAgICAgICBjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcbiAgICAgICAgY29uc3QgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6O1xuICAgICAgICAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5LFxuICAgICAgICAgICAgeTogaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xeixcbiAgICAgICAgICAgIHo6IGl6ICogcXcgKyBpdyAqIC1xeiArIGl4ICogLXF5IC0gaXkgKiAtcXhcbiAgICAgICAgfTtcbiAgICB9XG4gICAgVmVjdG9yMy5yb3RhdGUgPSByb3RhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIGxvY2F0ZWQgZm9yIFwiYW1vdW50XCIgKGZsb2F0KSBvbiB0aGUgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0aGUgdmVjdG9ycyBcInN0YXJ0XCIgYW5kIFwiZW5kXCJcbiAgICAgKiBAcGFyYW0gc3RhcnQgLSBkZWZpbmVzIHRoZSBzdGFydCB2YWx1ZVxuICAgICAqIEBwYXJhbSBlbmQgLSBkZWZpbmVzIHRoZSBlbmQgdmFsdWVcbiAgICAgKiBAcGFyYW0gYW1vdW50IC0gbWF4IGRlZmluZXMgYW1vdW50IGJldHdlZW4gYm90aCAoYmV0d2VlbiAwIGFuZCAxKVxuICAgICAqIEByZXR1cm5zIHRoZSBuZXcgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlcnAoc3RhcnQsIGVuZCwgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZSgwLCAwLCAwKTtcbiAgICAgICAgbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5sZXJwID0gbGVycDtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnaXZlbiB2ZWN0b3IgXCJyZXN1bHRcIiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGxpbmVhciBpbnRlcnBvbGF0aW9uIGZyb20gdGhlIHZlY3RvciBcInN0YXJ0XCIgZm9yIFwiYW1vdW50XCIgdG8gdGhlIHZlY3RvciBcImVuZFwiXG4gICAgICogQHBhcmFtIHN0YXJ0IC0gZGVmaW5lcyB0aGUgc3RhcnQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZW5kIC0gZGVmaW5lcyB0aGUgZW5kIHZhbHVlXG4gICAgICogQHBhcmFtIGFtb3VudCAtIG1heCBkZWZpbmVzIGFtb3VudCBiZXR3ZWVuIGJvdGggKGJldHdlZW4gMCBhbmQgMSlcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGVycFRvUmVmKHN0YXJ0LCBlbmQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gc3RhcnQueCArIChlbmQueCAtIHN0YXJ0LngpICogYW1vdW50O1xuICAgICAgICByZXN1bHQueSA9IHN0YXJ0LnkgKyAoZW5kLnkgLSBzdGFydC55KSAqIGFtb3VudDtcbiAgICAgICAgcmVzdWx0LnogPSBzdGFydC56ICsgKGVuZC56IC0gc3RhcnQueikgKiBhbW91bnQ7XG4gICAgfVxuICAgIFZlY3RvcjMubGVycFRvUmVmID0gbGVycFRvUmVmO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBhcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0aGUgdmVjdG9ycyBcImxlZnRcIiBhbmQgXCJyaWdodFwiXG4gICAgICogVGhlIGNyb3NzIHByb2R1Y3QgaXMgdGhlbiBvcnRob2dvbmFsIHRvIGJvdGggXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBjcm9zcyBwcm9kdWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3MobGVmdCwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gVmVjdG9yMy5aZXJvKCk7XG4gICAgICAgIFZlY3RvcjMuY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgVmVjdG9yMy5jcm9zcyA9IGNyb3NzO1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIHZlY3RvciBcInJlc3VsdFwiIHdpdGggdGhlIGNyb3NzIHByb2R1Y3Qgb2YgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIFRoZSBjcm9zcyBwcm9kdWN0IGlzIHRoZW4gb3J0aG9nb25hbCB0byBib3RoIFwibGVmdFwiIGFuZCBcInJpZ2h0XCJcbiAgICAgKiBAcGFyYW0gbGVmdCAtIGRlZmluZXMgdGhlIGxlZnQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByaWdodCAtIGRlZmluZXMgdGhlIHJpZ2h0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcmVzdWx0IC0gZGVmaW5lcyB0aGUgVmVjdG9yMyB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICovXG4gICAgZnVuY3Rpb24gY3Jvc3NUb1JlZihsZWZ0LCByaWdodCwgcmVzdWx0KSB7XG4gICAgICAgIHJlc3VsdC54ID0gbGVmdC55ICogcmlnaHQueiAtIGxlZnQueiAqIHJpZ2h0Lnk7XG4gICAgICAgIHJlc3VsdC55ID0gbGVmdC56ICogcmlnaHQueCAtIGxlZnQueCAqIHJpZ2h0Lno7XG4gICAgICAgIHJlc3VsdC56ID0gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XG4gICAgfVxuICAgIFZlY3RvcjMuY3Jvc3NUb1JlZiA9IGNyb3NzVG9SZWY7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDAuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBlbXB0eSBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gWmVybygpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5aZXJvID0gWmVybztcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IFZlY3RvcjMgc2V0IHRvICgxLjAsIDEuMCwgMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IHVuaXQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIE9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgxLjAsIDEuMCwgMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5PbmUgPSBPbmU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0b2xlbmd0aFNxdWFyZWQgKDAuMCwgMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgdXAgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFVwKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMS4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlVwID0gVXA7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAtMS4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgZG93biBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gRG93bigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIC0xLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuRG93biA9IERvd247XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoMC4wLCAwLjAsIDEuMClcbiAgICAgKiBAcmV0dXJucyBhIG5ldyBmb3J3YXJkIFZlY3RvcjNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBGb3J3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLkZvcndhcmQgPSBGb3J3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDAuMCwgMC4wLCAtMS4wKVxuICAgICAqIEByZXR1cm5zIGEgbmV3IGZvcndhcmQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIEJhY2t3YXJkKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAtMS4wKTtcbiAgICB9XG4gICAgVmVjdG9yMy5CYWNrd2FyZCA9IEJhY2t3YXJkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgVmVjdG9yMyBzZXQgdG8gKDEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgcmlnaHQgVmVjdG9yM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIFJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDEuMCwgMC4wLCAwLjApO1xuICAgIH1cbiAgICBWZWN0b3IzLlJpZ2h0ID0gUmlnaHQ7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBWZWN0b3IzIHNldCB0byAoLTEuMCwgMC4wLCAwLjApXG4gICAgICogQHJldHVybnMgYSBuZXcgbGVmdCBWZWN0b3IzXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgtMS4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFZlY3RvcjMuTGVmdCA9IExlZnQ7XG59KShWZWN0b3IzID0gZXhwb3J0cy5WZWN0b3IzIHx8IChleHBvcnRzLlZlY3RvcjMgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmVjdG9yMy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2NhbGFyID0gdm9pZCAwO1xuLyoqXG4gKiBUd28gcGkgY29uc3RhbnRzIGNvbnZlbmllbnQgZm9yIGNvbXB1dGF0aW9uLlxuICovXG5jb25zdCBUd29QaSA9IE1hdGguUEkgKiAyO1xuLyoqXG4gKiBCb29sZWFuIDogdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHBhcmFtIGEgLSBudW1iZXJcbiAqIEBwYXJhbSBiIC0gbnVtYmVyXG4gKiBAcGFyYW0gZXBzaWxvbiAtIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgYWJzb2x1dGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgYW5kIGIgaXMgbG93ZXIgdGhhbiBlcHNpbG9uIChkZWZhdWx0ID0gMS40MDEyOThFLTQ1KVxuICovXG5mdW5jdGlvbiB3aXRoaW5FcHNpbG9uKGEsIGIsIGVwc2lsb24gPSAxLjQwMTI5OGUtNDUpIHtcbiAgICBjb25zdCBudW0gPSBhIC0gYjtcbiAgICByZXR1cm4gLWVwc2lsb24gPD0gbnVtICYmIG51bSA8PSBlcHNpbG9uO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIDogdGhlIHVwcGVyIGNhc2UgdHJhbnNsYXRpb24gb2YgdGhlIG51bWJlciBpIHRvIGhleGFkZWNpbWFsLlxuICogQHBhcmFtIGkgLSBudW1iZXJcbiAqIEByZXR1cm5zIHRoZSB1cHBlciBjYXNlIHRyYW5zbGF0aW9uIG9mIHRoZSBudW1iZXIgaSB0byBoZXhhZGVjaW1hbC5cbiAqL1xuZnVuY3Rpb24gdG9IZXgoaSkge1xuICAgIGNvbnN0IHN0ciA9IGkudG9TdHJpbmcoMTYpO1xuICAgIGlmIChpIDw9IDE1KSB7XG4gICAgICAgIHJldHVybiAoJzAnICsgc3RyKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7XG59XG4vKipcbiAqIFJldHVybnMgLTEgaWYgdmFsdWUgaXMgbmVnYXRpdmUgYW5kICsxIGlzIHZhbHVlIGlzIHBvc2l0aXZlLlxuICogQHBhcmFtIF92YWx1ZSAtIHRoZSB2YWx1ZVxuICogQHJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGVxdWFsIHRvIHplcm8uXG4gKi9cbmZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcbiAgICBjb25zdCBfdmFsdWUgPSArdmFsdWU7IC8vIGNvbnZlcnQgdG8gYSBudW1iZXJcbiAgICBpZiAoX3ZhbHVlID09PSAwIHx8IGlzTmFOKF92YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF92YWx1ZSA+IDAgPyAxIDogLTE7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCdzIGJldHdlZW4gbWluIGFuZCBtYXguXG4gKiBSZXR1cm5zIG1pbiBpZiB0aGUgdmFsdWUgaXMgbG93ZXIgdGhhbiBtaW4uXG4gKiBSZXR1cm5zIG1heCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG1heC5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjbG1hcFxuICogQHBhcmFtIG1pbiAtIHRoZSBtaW4gdmFsdWUgdG8gY2xhbXAgdG8gKGRlZmF1bHQ6IDApXG4gKiBAcGFyYW0gbWF4IC0gdGhlIG1heCB2YWx1ZSB0byBjbGFtcCB0byAoZGVmYXVsdDogMSlcbiAqIEByZXR1cm5zIHRoZSBjbGFtcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNsYW1wKHZhbHVlLCBtaW4gPSAwLCBtYXggPSAxKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2YWx1ZSkpO1xufVxuLyoqXG4gKiB0aGUgbG9nMiBvZiB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIHRoZSB2YWx1ZSB0byBjb21wdXRlIGxvZzIgb2ZcbiAqIEByZXR1cm5zIHRoZSBsb2cyIG9mIHZhbHVlLlxuICovXG5mdW5jdGlvbiBsb2cyKHZhbHVlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHZhbHVlKSAqIE1hdGguTE9HMkU7XG59XG4vKipcbiAqIExvb3BzIHRoZSB2YWx1ZSwgc28gdGhhdCBpdCBpcyBuZXZlciBsYXJnZXIgdGhhbiBsZW5ndGggYW5kIG5ldmVyIHNtYWxsZXIgdGhhbiAwLlxuICpcbiAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgbW9kdWxvIG9wZXJhdG9yIGJ1dCBpdCB3b3JrcyB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG4gKiBGb3IgZXhhbXBsZSwgdXNpbmcgMy4wIGZvciB0IGFuZCAyLjUgZm9yIGxlbmd0aCwgdGhlIHJlc3VsdCB3b3VsZCBiZSAwLjUuXG4gKiBXaXRoIHQgPSA1IGFuZCBsZW5ndGggPSAyLjUsIHRoZSByZXN1bHQgd291bGQgYmUgMC4wLlxuICogTm90ZSwgaG93ZXZlciwgdGhhdCB0aGUgYmVoYXZpb3VyIGlzIG5vdCBkZWZpbmVkIGZvciBuZWdhdGl2ZSBudW1iZXJzIGFzIGl0IGlzIGZvciB0aGUgbW9kdWxvIG9wZXJhdG9yXG4gKiBAcGFyYW0gdmFsdWUgLSB0aGUgdmFsdWVcbiAqIEBwYXJhbSBsZW5ndGggLSB0aGUgbGVuZ3RoXG4gKiBAcmV0dXJucyB0aGUgbG9vcGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJlcGVhdCh2YWx1ZSwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHZhbHVlIC0gTWF0aC5mbG9vcih2YWx1ZSAvIGxlbmd0aCkgKiBsZW5ndGg7XG59XG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgdmFsdWUgYmV0d2VlbiAwLjAgYW5kIDEuMCB1c2luZyBtaW4gYW5kIG1heCB2YWx1ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIHRvIG5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHBhcmFtIG1heCAtIG1pbiB0byBub3JtYWxpemUgYmV0d2VlblxuICogQHJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG4vKipcbiAqIERlbm9ybWFsaXplIHRoZSB2YWx1ZSBmcm9tIDAuMCBhbmQgMS4wIHVzaW5nIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG5vcm1hbGl6ZWQgLSB2YWx1ZSB0byBkZW5vcm1hbGl6ZVxuICogQHBhcmFtIG1pbiAtIG1heCB0byBkZW5vcm1hbGl6ZSBiZXR3ZWVuXG4gKiBAcGFyYW0gbWF4IC0gbWluIHRvIGRlbm9ybWFsaXplIGJldHdlZW5cbiAqIEByZXR1cm5zIHRoZSBkZW5vcm1hbGl6ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGVub3JtYWxpemUobm9ybWFsaXplZCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZCAqIChtYXggLSBtaW4pICsgbWluO1xufVxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBzaG9ydGVzdCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGdpdmVuIGFuZ2xlcyBnaXZlbiBpbiBkZWdyZWVzLlxuICogQHBhcmFtIGN1cnJlbnQgLSBjdXJyZW50IGFuZ2xlIGluIGRlZ3JlZXNcbiAqIEBwYXJhbSB0YXJnZXQgLSB0YXJnZXQgYW5nbGUgaW4gZGVncmVlc1xuICogQHJldHVybnMgdGhlIGRlbHRhXG4gKi9cbmZ1bmN0aW9uIGRlbHRhQW5nbGUoY3VycmVudCwgdGFyZ2V0KSB7XG4gICAgbGV0IG51bSA9IHJlcGVhdCh0YXJnZXQgLSBjdXJyZW50LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIG51bTtcbn1cbi8qKlxuICogUGluZ1BvbmdzIHRoZSB2YWx1ZSB0LCBzbyB0aGF0IGl0IGlzIG5ldmVyIGxhcmdlciB0aGFuIGxlbmd0aCBhbmQgbmV2ZXIgc21hbGxlciB0aGFuIDAuXG4gKiBAcGFyYW0gdHggLSB2YWx1ZVxuICogQHBhcmFtIGxlbmd0aCAtIGxlbmd0aFxuICogQHJldHVybnMgVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgbW92ZSBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIDAgYW5kIGxlbmd0aFxuICovXG5mdW5jdGlvbiBwaW5nUG9uZyh0eCwgbGVuZ3RoKSB7XG4gICAgY29uc3QgdCA9IHJlcGVhdCh0eCwgbGVuZ3RoICogMi4wKTtcbiAgICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG4vKipcbiAqIEludGVycG9sYXRlcyBiZXR3ZWVuIG1pbiBhbmQgbWF4IHdpdGggc21vb3RoaW5nIGF0IHRoZSBsaW1pdHMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBtaW4gYW5kIG1heCBpbiBhIHNpbWlsYXIgd2F5IHRvIExlcnAuIEhvd2V2ZXIsIHRoZSBpbnRlcnBvbGF0aW9uIHdpbGwgZ3JhZHVhbGx5IHNwZWVkIHVwXG4gKiBmcm9tIHRoZSBzdGFydCBhbmQgc2xvdyBkb3duIHRvd2FyZCB0aGUgZW5kLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgbmF0dXJhbC1sb29raW5nIGFuaW1hdGlvbiwgZmFkaW5nIGFuZCBvdGhlciB0cmFuc2l0aW9ucy5cbiAqIEBwYXJhbSBmcm9tIC0gZnJvbVxuICogQHBhcmFtIHRvIC0gdG9cbiAqIEBwYXJhbSB0eCAtIHZhbHVlXG4gKiBAcmV0dXJucyB0aGUgc21vb3RoIHN0ZXBwZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gc21vb3RoU3RlcChmcm9tLCB0bywgdHgpIHtcbiAgICBsZXQgdCA9IGNsYW1wKHR4KTtcbiAgICB0ID0gLTIuMCAqIHQgKiB0ICogdCArIDMuMCAqIHQgKiB0O1xuICAgIHJldHVybiB0byAqIHQgKyBmcm9tICogKDEuMCAtIHQpO1xufVxuLyoqXG4gKiBNb3ZlcyBhIHZhbHVlIGN1cnJlbnQgdG93YXJkcyB0YXJnZXQuXG4gKlxuICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBNYXRoZi5MZXJwIGJ1dCBpbnN0ZWFkIHRoZSBmdW5jdGlvbiB3aWxsIGVuc3VyZSB0aGF0IHRoZSBzcGVlZCBuZXZlciBleGNlZWRzIG1heERlbHRhLlxuICogTmVnYXRpdmUgdmFsdWVzIG9mIG1heERlbHRhIHB1c2hlcyB0aGUgdmFsdWUgYXdheSBmcm9tIHRhcmdldC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyB2YWx1ZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkcyhjdXJyZW50LCB0YXJnZXQsIG1heERlbHRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKE1hdGguYWJzKHRhcmdldCAtIGN1cnJlbnQpIDw9IG1heERlbHRhKSB7XG4gICAgICAgIHJlc3VsdCA9IHRhcmdldDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGN1cnJlbnQgKyBzaWduKHRhcmdldCAtIGN1cnJlbnQpICogbWF4RGVsdGE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTW92ZVRvd2FyZHMgYnV0IG1ha2VzIHN1cmUgdGhlIHZhbHVlcyBpbnRlcnBvbGF0ZSBjb3JyZWN0bHkgd2hlbiB0aGV5IHdyYXAgYXJvdW5kIDM2MCBkZWdyZWVzLlxuICpcbiAqIFZhcmlhYmxlcyBjdXJyZW50IGFuZCB0YXJnZXQgYXJlIGFzc3VtZWQgdG8gYmUgaW4gZGVncmVlcy4gRm9yIG9wdGltaXphdGlvbiByZWFzb25zLCBuZWdhdGl2ZSB2YWx1ZXMgb2YgbWF4RGVsdGFcbiAqICBhcmUgbm90IHN1cHBvcnRlZCBhbmQgbWF5IGNhdXNlIG9zY2lsbGF0aW9uLiBUbyBwdXNoIGN1cnJlbnQgYXdheSBmcm9tIGEgdGFyZ2V0IGFuZ2xlLCBhZGQgMTgwIHRvIHRoYXQgYW5nbGUgaW5zdGVhZC5cbiAqIEBwYXJhbSBjdXJyZW50IC0gY3VycmVudCB2YWx1ZVxuICogQHBhcmFtIHRhcmdldCAtIHRhcmdldCB2YWx1ZVxuICogQHBhcmFtIG1heERlbHRhIC0gbWF4IGRpc3RhbmNlIHRvIG1vdmVcbiAqIEByZXR1cm5zIHJlc3VsdGluZyBhbmdsZVxuICovXG5mdW5jdGlvbiBtb3ZlVG93YXJkc0FuZ2xlKGN1cnJlbnQsIHRhcmdldCwgbWF4RGVsdGEpIHtcbiAgICBjb25zdCBudW0gPSBkZWx0YUFuZ2xlKGN1cnJlbnQsIHRhcmdldCk7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKC1tYXhEZWx0YSA8IG51bSAmJiBudW0gPCBtYXhEZWx0YSkge1xuICAgICAgICByZXN1bHQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBtb3ZlVG93YXJkcyhjdXJyZW50LCBjdXJyZW50ICsgbnVtLCBtYXhEZWx0YSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgc2NhbGFyIHdpdGggdmFsdWVzIGxpbmVhcmx5IGludGVycG9sYXRlZCBvZiBcImFtb3VudFwiIGJldHdlZW4gdGhlIHN0YXJ0IHNjYWxhciBhbmQgdGhlIGVuZCBzY2FsYXJcbiAqIEBwYXJhbSBzdGFydCAtIHN0YXJ0IHZhbHVlXG4gKiBAcGFyYW0gZW5kIC0gdGFyZ2V0IHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gYW1vdW50IHRvIGxlcnAgYmV0d2VlblxuICogQHJldHVybnMgdGhlIGxlcnBlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBsZXJwKHN0YXJ0LCBlbmQsIGFtb3VudCkge1xuICAgIHJldHVybiBzdGFydCArIChlbmQgLSBzdGFydCkgKiBhbW91bnQ7XG59XG4vKipcbiAqIFNhbWUgYXMgTGVycCBidXQgbWFrZXMgc3VyZSB0aGUgdmFsdWVzIGludGVycG9sYXRlIGNvcnJlY3RseSB3aGVuIHRoZXkgd3JhcCBhcm91bmQgMzYwIGRlZ3JlZXMuXG4gKiBUaGUgcGFyYW1ldGVyIHQgaXMgY2xhbXBlZCB0byB0aGUgcmFuZ2UgWzAsIDFdLiBWYXJpYWJsZXMgYSBhbmQgYiBhcmUgYXNzdW1lZCB0byBiZSBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHN0YXJ0IC0gc3RhcnQgdmFsdWVcbiAqIEBwYXJhbSBlbmQgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSBhbW91bnQgLSBhbW91bnQgdG8gbGVycCBiZXR3ZWVuXG4gKiBAcmV0dXJucyB0aGUgbGVycGVkIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGxlcnBBbmdsZShzdGFydCwgZW5kLCBhbW91bnQpIHtcbiAgICBsZXQgbnVtID0gcmVwZWF0KGVuZCAtIHN0YXJ0LCAzNjAuMCk7XG4gICAgaWYgKG51bSA+IDE4MC4wKSB7XG4gICAgICAgIG51bSAtPSAzNjAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0ICsgbnVtICogY2xhbXAoYW1vdW50KTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGluZWFyIHBhcmFtZXRlciB0IHRoYXQgcHJvZHVjZXMgdGhlIGludGVycG9sYW50IHZhbHVlIHdpdGhpbiB0aGUgcmFuZ2UgW2EsIGJdLlxuICogQHBhcmFtIGEgLSBzdGFydCB2YWx1ZVxuICogQHBhcmFtIGIgLSB0YXJnZXQgdmFsdWVcbiAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIGJldHdlZW4gYSBhbmQgYlxuICogQHJldHVybnMgdGhlIGludmVyc2VMZXJwIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGludmVyc2VMZXJwKGEsIGIsIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgcmVzdWx0ID0gY2xhbXAoKHZhbHVlIC0gYSkgLyAoYiAtIGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IDAuMDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogUmV0dXJucyBhIG5ldyBzY2FsYXIgbG9jYXRlZCBmb3IgXCJhbW91bnRcIiAoZmxvYXQpIG9uIHRoZSBIZXJtaXRlIHNwbGluZSBkZWZpbmVkIGJ5IHRoZSBzY2FsYXJzIFwidmFsdWUxXCIsIFwidmFsdWUzXCIsIFwidGFuZ2VudDFcIiwgXCJ0YW5nZW50MlwiLlxuICoge0BsaW5rIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vSGVybWl0ZVBvbHlub21pYWwuaHRtbH1cbiAqIEBwYXJhbSB2YWx1ZTEgLSBzcGxpbmUgdmFsdWVcbiAqIEBwYXJhbSB0YW5nZW50MSAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHZhbHVlMiAtIHNwbGluZSB2YWx1ZVxuICogQHBhcmFtIHRhbmdlbnQyIC0gc3BsaW5lIHZhbHVlXG4gKiBAcGFyYW0gYW1vdW50IC0gaW5wdXQgdmFsdWVcbiAqIEByZXR1cm5zIGhlcm1pdGUgcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGhlcm1pdGUodmFsdWUxLCB0YW5nZW50MSwgdmFsdWUyLCB0YW5nZW50MiwgYW1vdW50KSB7XG4gICAgY29uc3Qgc3F1YXJlZCA9IGFtb3VudCAqIGFtb3VudDtcbiAgICBjb25zdCBjdWJlZCA9IGFtb3VudCAqIHNxdWFyZWQ7XG4gICAgY29uc3QgcGFydDEgPSAyLjAgKiBjdWJlZCAtIDMuMCAqIHNxdWFyZWQgKyAxLjA7XG4gICAgY29uc3QgcGFydDIgPSAtMi4wICogY3ViZWQgKyAzLjAgKiBzcXVhcmVkO1xuICAgIGNvbnN0IHBhcnQzID0gY3ViZWQgLSAyLjAgKiBzcXVhcmVkICsgYW1vdW50O1xuICAgIGNvbnN0IHBhcnQ0ID0gY3ViZWQgLSBzcXVhcmVkO1xuICAgIHJldHVybiB2YWx1ZTEgKiBwYXJ0MSArIHZhbHVlMiAqIHBhcnQyICsgdGFuZ2VudDEgKiBwYXJ0MyArIHRhbmdlbnQyICogcGFydDQ7XG59XG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gZmxvYXQgbnVtYmVyIGJldHdlZW4gYW5kIG1pbiBhbmQgbWF4IHZhbHVlc1xuICogQHBhcmFtIG1pbiAtIG1pbiB2YWx1ZSBvZiByYW5kb21cbiAqIEBwYXJhbSBtYXggLSBtYXggdmFsdWUgb2YgcmFuZG9tXG4gKiBAcmV0dXJucyByYW5kb20gdmFsdWVcbiAqL1xuZnVuY3Rpb24gcmFuZG9tUmFuZ2UobWluLCBtYXgpIHtcbiAgICBpZiAobWluID09PSBtYXgpIHtcbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcmNlbnRhZ2Ugb2YgYSBudW1iZXIgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBSYW5nZVRvUGVyY2VudCg0MCwyMCw2MCkgd2lsbCByZXR1cm4gMC41ICg1MCUpXG4gKiBSYW5nZVRvUGVyY2VudCgzNCwwLDEwMCkgd2lsbCByZXR1cm4gMC4zNCAoMzQlKVxuICogQHBhcmFtIG51bSAtIHRvIGNvbnZlcnQgdG8gcGVyY2VudGFnZVxuICogQHBhcmFtIG1pbiAtIG1pbiByYW5nZVxuICogQHBhcmFtIG1heCAtIG1heCByYW5nZVxuICogQHJldHVybnMgdGhlIHBlcmNlbnRhZ2VcbiAqL1xuZnVuY3Rpb24gcmFuZ2VUb1BlcmNlbnQobnVtLCBtaW4sIG1heCkge1xuICAgIHJldHVybiAobnVtIC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVtYmVyIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBlcmNlbnRhZ2UgaW4gYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBQZXJjZW50VG9SYW5nZSgwLjM0LDAsMTAwKSB3aWxsIHJldHVybiAzNC5cbiAqIEBwYXJhbSBwZXJjZW50IC0gdG8gY29udmVydCB0byBudW1iZXJcbiAqIEBwYXJhbSBtaW4gLSBtaW4gcmFuZ2VcbiAqIEBwYXJhbSBtYXggLSBtYXggcmFuZ2VcbiAqIEByZXR1cm5zIHRoZSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gcGVyY2VudFRvUmFuZ2UocGVyY2VudCwgbWluLCBtYXgpIHtcbiAgICByZXR1cm4gKG1heCAtIG1pbikgKiBwZXJjZW50ICsgbWluO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhbmdsZSBjb252ZXJ0ZWQgdG8gZXF1aXZhbGVudCB2YWx1ZSBiZXR3ZWVuIC1NYXRoLlBJIGFuZCBNYXRoLlBJIHJhZGlhbnMuXG4gKiBAcGFyYW0gYW5nbGUgLSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplIGluIHJhZGlhbi5cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgYW5nbGUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJhZGlhbnMoYW5nbGUpIHtcbiAgICAvLyBNb3JlIHByZWNpc2UgYnV0IHNsb3dlciB2ZXJzaW9uIGtlcHQgZm9yIHJlZmVyZW5jZS5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb21tZW50ZWQtb3V0LWNvZGVcbiAgICAvKlxuICAgICAgLy8gYW5nbGUgPSBhbmdsZSAlIFRvb2xzLlR3b1BpO1xuICAgICAgLy8gYW5nbGUgPSAoYW5nbGUgKyBUb29scy5Ud29QaSkgJSBUb29scy5Ud29QaTtcbiAgXG4gICAgICAvL2lmIChhbmdsZSA+IE1hdGguUEkpIHtcbiAgICAgIC8vXHRhbmdsZSAtPSBUb29scy5Ud29QaTtcbiAgICAgIC8vfVxuICAgICAgICAqL1xuICAgIHJldHVybiBhbmdsZSAtIFR3b1BpICogTWF0aC5mbG9vcigoYW5nbGUgKyBNYXRoLlBJKSAvIFR3b1BpKTtcbn1cbi8qKlxuICogU2NhbGFyIGNvbXB1dGF0aW9uIGxpYnJhcnlcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5TY2FsYXIgPSB7XG4gICAgd2l0aGluRXBzaWxvbixcbiAgICB0b0hleCxcbiAgICBzaWduLFxuICAgIGNsYW1wLFxuICAgIGxvZzIsXG4gICAgcmVwZWF0LFxuICAgIG5vcm1hbGl6ZSxcbiAgICBkZW5vcm1hbGl6ZSxcbiAgICBkZWx0YUFuZ2xlLFxuICAgIHBpbmdQb25nLFxuICAgIHNtb290aFN0ZXAsXG4gICAgbW92ZVRvd2FyZHMsXG4gICAgbW92ZVRvd2FyZHNBbmdsZSxcbiAgICBsZXJwLFxuICAgIGxlcnBBbmdsZSxcbiAgICBpbnZlcnNlTGVycCxcbiAgICBoZXJtaXRlLFxuICAgIHJhbmRvbVJhbmdlLFxuICAgIHJhbmdlVG9QZXJjZW50LFxuICAgIHBlcmNlbnRUb1JhbmdlLFxuICAgIG5vcm1hbGl6ZVJhZGlhbnMsXG4gICAgVHdvUGlcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TY2FsYXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLlJBRDJERUcgPSBleHBvcnRzLkRFRzJSQUQgPSBleHBvcnRzLkVwc2lsb24gPSBleHBvcnRzLlRvTGluZWFyU3BhY2UgPSBleHBvcnRzLlRvR2FtbWFTcGFjZSA9IGV4cG9ydHMuU3BhY2UgPSBleHBvcnRzLk9yaWVudGF0aW9uID0gdm9pZCAwO1xuLyoqXG4gKiBEZWZpbmVzIHBvdGVudGlhbCBvcmllbnRhdGlvbiBmb3IgYmFjayBmYWNlIGN1bGxpbmdcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE9yaWVudGF0aW9uO1xuKGZ1bmN0aW9uIChPcmllbnRhdGlvbikge1xuICAgIC8qKlxuICAgICAqIENsb2Nrd2lzZVxuICAgICAqL1xuICAgIE9yaWVudGF0aW9uW09yaWVudGF0aW9uW1wiQ1dcIl0gPSAwXSA9IFwiQ1dcIjtcbiAgICAvKiogQ291bnRlciBjbG9ja3dpc2UgKi9cbiAgICBPcmllbnRhdGlvbltPcmllbnRhdGlvbltcIkNDV1wiXSA9IDFdID0gXCJDQ1dcIjtcbn0pKE9yaWVudGF0aW9uID0gZXhwb3J0cy5PcmllbnRhdGlvbiB8fCAoZXhwb3J0cy5PcmllbnRhdGlvbiA9IHt9KSk7XG4vKipcbiAqIERlZmluZXMgc3VwcG9ydGVkIHNwYWNlc1xuICogQHB1YmxpY1xuICovXG52YXIgU3BhY2U7XG4oZnVuY3Rpb24gKFNwYWNlKSB7XG4gICAgLyoqIExvY2FsIChvYmplY3QpIHNwYWNlICovXG4gICAgU3BhY2VbU3BhY2VbXCJMT0NBTFwiXSA9IDBdID0gXCJMT0NBTFwiO1xuICAgIC8qKiBXb3JsZCBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiV09STERcIl0gPSAxXSA9IFwiV09STERcIjtcbiAgICAvKiogQm9uZSBzcGFjZSAqL1xuICAgIFNwYWNlW1NwYWNlW1wiQk9ORVwiXSA9IDJdID0gXCJCT05FXCI7XG59KShTcGFjZSA9IGV4cG9ydHMuU3BhY2UgfHwgKGV4cG9ydHMuU3BhY2UgPSB7fSkpO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgYSB2YWx1ZSB0byBnYW1tYSBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvR2FtbWFTcGFjZSA9IDEgLyAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gY29udmVydCBhIHZhbHVlIHRvIGxpbmVhciBzcGFjZVxuICogQHB1YmxpY1xuICovXG5leHBvcnRzLlRvTGluZWFyU3BhY2UgPSAyLjI7XG4vKipcbiAqIENvbnN0YW50IHVzZWQgdG8gZGVmaW5lIHRoZSBtaW5pbWFsIG51bWJlciB2YWx1ZSBpbiBCYWJ5bG9uLmpzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuRXBzaWxvbiA9IDAuMDAwMDAxO1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIHRvIGNvbnZlcnQgZnJvbSBFdWxlciBkZWdyZWVzIHRvIHJhZGlhbnNcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0cy5ERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCB0byBjb252ZXJ0IGZyb20gcmFkaWFucyB0byBFdWxlciBkZWdyZWVzXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydHMuUkFEMkRFRyA9IDM2MCAvIChNYXRoLlBJICogMik7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUXVhdGVybmlvbiA9IHZvaWQgMDtcbmNvbnN0IFZlY3RvcjNfMSA9IHJlcXVpcmUoXCIuL1ZlY3RvcjNcIik7XG5jb25zdCBTY2FsYXJfMSA9IHJlcXVpcmUoXCIuL1NjYWxhclwiKTtcbmNvbnN0IHR5cGVzXzEgPSByZXF1aXJlKFwiLi90eXBlc1wiKTtcbi8qKlxuICogQHB1YmxpY1xuICovXG52YXIgUXVhdGVybmlvbjtcbihmdW5jdGlvbiAoUXVhdGVybmlvbikge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgUXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiBmbG9hdHNcbiAgICAgKiBAcGFyYW0geCAtIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB5IC0gZGVmaW5lcyB0aGUgc2Vjb25kIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KVxuICAgICAqIEBwYXJhbSB6IC0gZGVmaW5lcyB0aGUgdGhpcmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpXG4gICAgICogQHBhcmFtIHcgLSBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGUoXG4gICAgLyoqIGRlZmluZXMgdGhlIGZpcnN0IGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHggPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBzZWNvbmQgY29tcG9uZW50ICgwIGJ5IGRlZmF1bHQpICovXG4gICAgeSA9IDAuMCwgXG4gICAgLyoqIGRlZmluZXMgdGhlIHRoaXJkIGNvbXBvbmVudCAoMCBieSBkZWZhdWx0KSAqL1xuICAgIHogPSAwLjAsIFxuICAgIC8qKiBkZWZpbmVzIHRoZSBmb3VydGggY29tcG9uZW50ICgxLjAgYnkgZGVmYXVsdCkgKi9cbiAgICB3ID0gMS4wKSB7XG4gICAgICAgIHJldHVybiB7IHgsIHksIHosIHcgfTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5jcmVhdGUgPSBjcmVhdGU7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIG5ldyBRdWF0ZXJuaW9uIGFzIHRoZSByZXN1bHQgb2YgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gZ2l2ZW4gcXVhdGVybmlvbnMuXG4gICAgICogQHBhcmFtIHExIC0gdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcTIgLSB0aGUgc2Vjb25kIHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZGQocTEsIHEyKSB7XG4gICAgICAgIHJldHVybiB7IHg6IHExLnggKyBxMi54LCB5OiBxMS55ICsgcTIueSwgejogcTEueiArIHEyLnosIHc6IHExLncgKyBxMi53IH07XG4gICAgfVxuICAgIFF1YXRlcm5pb24uYWRkID0gYWRkO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgcm90YXRpb24gZnJvbSB0aGUgZ2l2ZW4gRXVsZXIgZmxvYXQgYW5nbGVzICh5LCB4LCB6KSBhbmQgc3RvcmVzIGl0IGluIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSB5YXcgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWSBheGlzXG4gICAgICogQHBhcmFtIHBpdGNoIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFggYXhpc1xuICAgICAqIEBwYXJhbSByb2xsIC0gZGVmaW5lcyB0aGUgcm90YXRpb24gYXJvdW5kIFogYXhpc1xuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHlhdywgcGl0Y2gsIHJvbGwpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMywgczIgKiBjMSAqIGMzIC0gYzIgKiBzMSAqIHMzLCBjMiAqIGMxICogczMgLSBzMiAqIHMxICogYzMsIGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMyk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ucm90YXRpb25ZYXdQaXRjaFJvbGwgPSByb3RhdGlvbllhd1BpdGNoUm9sbDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcm90YXRpb24gdGhhdCByb3RhdGVzIHogZGVncmVlcyBhcm91bmQgdGhlIHogYXhpcywgeCBkZWdyZWVzIGFyb3VuZCB0aGUgeCBheGlzLCBhbmQgeSBkZWdyZWVzIGFyb3VuZCB0aGUgeSBheGlzLlxuICAgICAqIEBwYXJhbSB4IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB4IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB5IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB5IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqIEBwYXJhbSB6IC0gdGhlIHJvdGF0aW9uIG9uIHRoZSB6IGF4aXMgaW4gZXVsZXIgZGVncmVlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyKHgsIHksIHopIHtcbiAgICAgICAgcmV0dXJuIHJvdGF0aW9uWWF3UGl0Y2hSb2xsKHkgKiB0eXBlc18xLkRFRzJSQUQsIHggKiB0eXBlc18xLkRFRzJSQUQsIHogKiB0eXBlc18xLkRFRzJSQUQpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyID0gZXVsZXI7XG4gICAgLyoqXG4gICAgICogR2V0cyBsZW5ndGggb2YgY3VycmVudCBxdWF0ZXJuaW9uXG4gICAgICogQHJldHVybnMgdGhlIHF1YXRlcm5pb24gbGVuZ3RoIChmbG9hdClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsZW5ndGgocSkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KGxlbmd0aFNxdWFyZWQocSkpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBHZXRzIGxlbmd0aCBvZiBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgcXVhdGVybmlvbiBsZW5ndGggKGZsb2F0KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxlbmd0aFNxdWFyZWQocSkge1xuICAgICAgICByZXR1cm4gcS54ICogcS54ICsgcS55ICogcS55ICsgcS56ICogcS56ICsgcS53ICogcS53O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmxlbmd0aFNxdWFyZWQgPSBsZW5ndGhTcXVhcmVkO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IChmbG9hdCkgYmV0d2VlbiB0aGUgcXVhdGVybmlvbnMgXCJsZWZ0XCIgYW5kIFwicmlnaHRcIlxuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyB0aGUgbGVmdCBvcGVyYW5kXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyB0aGUgcmlnaHQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIHRoZSBkb3QgcHJvZHVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRvdChsZWZ0LCByaWdodCkge1xuICAgICAgICByZXR1cm4gKGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0LncpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmRvdCA9IGRvdDtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbmdsZSBpbiBkZWdyZWVzIGJldHdlZW4gdHdvIHJvdGF0aW9ucyBhIGFuZCBiLlxuICAgICAqIEBwYXJhbSBxdWF0MSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcXVhdDIgLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFuZ2xlKHF1YXQxLCBxdWF0Mikge1xuICAgICAgICBjb25zdCBkb3RWYWwgPSBkb3QocXVhdDEsIHF1YXQyKTtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLmFicyhkb3RWYWwpLCAxKSkgKiAyICogdHlwZXNfMS5SQUQyREVHO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmFuZ2xlID0gYW5nbGU7XG4gICAgLyoqXG4gICAgICogVGhlIGZyb20gcXVhdGVybmlvbiBpcyByb3RhdGVkIHRvd2FyZHMgdG8gYnkgYW4gYW5ndWxhciBzdGVwIG9mIG1heERlZ3JlZXNEZWx0YS5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIGRlZmluZXMgdGhlIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gdG8gLSBkZWZpbmVzIHRoZSBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBtYXhEZWdyZWVzRGVsdGEgLSB0aGUgaW50ZXJ2YWwgc3RlcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJvdGF0ZVRvd2FyZHMoZnJvbSwgdG8sIG1heERlZ3JlZXNEZWx0YSkge1xuICAgICAgICBjb25zdCBudW0gPSBhbmdsZShmcm9tLCB0byk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oMSwgbWF4RGVncmVlc0RlbHRhIC8gbnVtKTtcbiAgICAgICAgcmV0dXJuIHNsZXJwKGZyb20sIHRvLCB0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGVUb3dhcmRzID0gcm90YXRlVG93YXJkcztcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGZvcndhcmQgYW5kIHVwd2FyZHMgZGlyZWN0aW9ucy5cbiAgICAgKiBAcGFyYW0gZm9yd2FyZCAtIHRoZSBkaXJlY3Rpb24gdG8gbG9vayBpblxuICAgICAqIEBwYXJhbSB1cCAtIHRoZSB2ZWN0b3IgdGhhdCBkZWZpbmVzIGluIHdoaWNoIGRpcmVjdGlvbiB1cCBpc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxvb2tSb3RhdGlvbihmb3J3YXJkLCB1cCA9IHsgeDogMC4wLCB5OiAxLjAsIHo6IDAuMCB9KSB7XG4gICAgICAgIGNvbnN0IGZvcndhcmROZXcgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZm9yd2FyZCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHVwLCBmb3J3YXJkTmV3KSk7XG4gICAgICAgIGNvbnN0IHVwTmV3ID0gVmVjdG9yM18xLlZlY3RvcjMuY3Jvc3MoZm9yd2FyZE5ldywgcmlnaHQpO1xuICAgICAgICBjb25zdCBtMDAgPSByaWdodC54O1xuICAgICAgICBjb25zdCBtMDEgPSByaWdodC55O1xuICAgICAgICBjb25zdCBtMDIgPSByaWdodC56O1xuICAgICAgICBjb25zdCBtMTAgPSB1cE5ldy54O1xuICAgICAgICBjb25zdCBtMTEgPSB1cE5ldy55O1xuICAgICAgICBjb25zdCBtMTIgPSB1cE5ldy56O1xuICAgICAgICBjb25zdCBtMjAgPSBmb3J3YXJkTmV3Lng7XG4gICAgICAgIGNvbnN0IG0yMSA9IGZvcndhcmROZXcueTtcbiAgICAgICAgY29uc3QgbTIyID0gZm9yd2FyZE5ldy56O1xuICAgICAgICBjb25zdCBudW04ID0gbTAwICsgbTExICsgbTIyO1xuICAgICAgICBjb25zdCBxdWF0ZXJuaW9uID0gY3JlYXRlKCk7XG4gICAgICAgIGlmIChudW04ID4gMCkge1xuICAgICAgICAgICAgbGV0IG51bSA9IE1hdGguc3FydChudW04ICsgMSk7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLncgPSBudW0gKiAwLjU7XG4gICAgICAgICAgICBudW0gPSAwLjUgLyBudW07XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTEyIC0gbTIxKSAqIG51bTtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjAgLSBtMDIpICogbnVtO1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMSAtIG0xMCkgKiBudW07XG4gICAgICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobTAwID49IG0xMSAmJiBtMDAgPj0gbTIyKSB7XG4gICAgICAgICAgICBjb25zdCBudW03ID0gTWF0aC5zcXJ0KDEgKyBtMDAgLSBtMTEgLSBtMjIpO1xuICAgICAgICAgICAgY29uc3QgbnVtNCA9IDAuNSAvIG51bTc7XG4gICAgICAgICAgICBxdWF0ZXJuaW9uLnggPSAwLjUgKiBudW03O1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gKG0wMSArIG0xMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi56ID0gKG0wMiArIG0yMCkgKiBudW00O1xuICAgICAgICAgICAgcXVhdGVybmlvbi53ID0gKG0xMiAtIG0yMSkgKiBudW00O1xuICAgICAgICAgICAgcmV0dXJuIHF1YXRlcm5pb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG0xMSA+IG0yMikge1xuICAgICAgICAgICAgY29uc3QgbnVtNiA9IE1hdGguc3FydCgxICsgbTExIC0gbTAwIC0gbTIyKTtcbiAgICAgICAgICAgIGNvbnN0IG51bTMgPSAwLjUgLyBudW02O1xuICAgICAgICAgICAgcXVhdGVybmlvbi54ID0gKG0xMCArIG0wMSkgKiBudW0zO1xuICAgICAgICAgICAgcXVhdGVybmlvbi55ID0gMC41ICogbnVtNjtcbiAgICAgICAgICAgIHF1YXRlcm5pb24ueiA9IChtMjEgKyBtMTIpICogbnVtMztcbiAgICAgICAgICAgIHF1YXRlcm5pb24udyA9IChtMjAgLSBtMDIpICogbnVtMztcbiAgICAgICAgICAgIHJldHVybiBxdWF0ZXJuaW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG51bTUgPSBNYXRoLnNxcnQoMSArIG0yMiAtIG0wMCAtIG0xMSk7XG4gICAgICAgIGNvbnN0IG51bTIgPSAwLjUgLyBudW01O1xuICAgICAgICBxdWF0ZXJuaW9uLnggPSAobTIwICsgbTAyKSAqIG51bTI7XG4gICAgICAgIHF1YXRlcm5pb24ueSA9IChtMjEgKyBtMTIpICogbnVtMjtcbiAgICAgICAgcXVhdGVybmlvbi56ID0gMC41ICogbnVtNTtcbiAgICAgICAgcXVhdGVybmlvbi53ID0gKG0wMSAtIG0xMCkgKiBudW0yO1xuICAgICAgICByZXR1cm4gcXVhdGVybmlvbjtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5sb29rUm90YXRpb24gPSBsb29rUm90YXRpb247XG4gICAgLyoqXG4gICAgICogTm9ybWFsaXplIGluIHBsYWNlIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCB1cGRhdGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemUocSkge1xuICAgICAgICBjb25zdCBxTGVuZ3RoID0gMS4wIC8gbGVuZ3RoKHEpO1xuICAgICAgICByZXR1cm4gY3JlYXRlKHEueCAqIHFMZW5ndGgsIHEueSAqIHFMZW5ndGgsIHEueiAqIHFMZW5ndGgsIHEudyAqIHFMZW5ndGgpO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcm90YXRpb24gd2hpY2ggcm90YXRlcyBmcm9tIGZyb21EaXJlY3Rpb24gdG8gdG9EaXJlY3Rpb24uXG4gICAgICogQHBhcmFtIGZyb20gLSBkZWZpbmVzIHRoZSBmaXJzdCBkaXJlY3Rpb24gVmVjdG9yXG4gICAgICogQHBhcmFtIHRvIC0gZGVmaW5lcyB0aGUgdGFyZ2V0IGRpcmVjdGlvbiBWZWN0b3JcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmcm9tVG9Sb3RhdGlvbihmcm9tLCB0bywgdXAgPSBWZWN0b3IzXzEuVmVjdG9yMy5VcCgpKSB7XG4gICAgICAgIC8vIFVuaXR5LWJhc2VkIGNhbGN1bGF0aW9ucyBpbXBsZW1lbnRlZCBmcm9tIGh0dHBzOi8vZm9ydW0udW5pdHkuY29tL3RocmVhZHMvcXVhdGVybmlvbi1sb29rcm90YXRpb24tYXJvdW5kLWFuLWF4aXMuNjA4NDcwLyNwb3N0LTQwNjk4ODhcbiAgICAgICAgY29uc3QgdjAgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoZnJvbSk7XG4gICAgICAgIGNvbnN0IHYxID0gVmVjdG9yM18xLlZlY3RvcjMubm9ybWFsaXplKHRvKTtcbiAgICAgICAgY29uc3QgYSA9IFZlY3RvcjNfMS5WZWN0b3IzLmNyb3NzKHYwLCB2MSk7XG4gICAgICAgIGNvbnN0IHcgPSBNYXRoLnNxcnQoVmVjdG9yM18xLlZlY3RvcjMubGVuZ3RoU3F1YXJlZCh2MCkgKiBWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKHYxKSkgK1xuICAgICAgICAgICAgVmVjdG9yM18xLlZlY3RvcjMuZG90KHYwLCB2MSk7XG4gICAgICAgIGlmIChWZWN0b3IzXzEuVmVjdG9yMy5sZW5ndGhTcXVhcmVkKGEpIDwgMC4wMDAxKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmVjdG9ycyBhcmUgcGFyYWxsZWwsIGNoZWNrIHcgdG8gZmluZCBkaXJlY3Rpb25cbiAgICAgICAgICAgIC8vIGlmIHcgaXMgMCB0aGVuIHZhbHVlcyBhcmUgb3Bwb3NpdGUsIGFuZCB3ZSBzb3VsZCByb3RhdGUgMTgwIGRlZ3JlZXMgYXJvdW5kIHRoZSBzdXBwbGllZCBheGlzXG4gICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIHZlY3RvcnMgaW4gdGhlIHNhbWUgZGlyZWN0aW9uIGFuZCBubyByb3RhdGlvbiBzaG91bGQgb2NjdXJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh3KSA8IDAuMDAwMVxuICAgICAgICAgICAgICAgID8gbm9ybWFsaXplKGNyZWF0ZSh1cC54LCB1cC55LCB1cC56LCAwKSlcbiAgICAgICAgICAgICAgICA6IElkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKGNyZWF0ZShhLngsIGEueSwgYS56LCB3KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tVG9Sb3RhdGlvbiA9IGZyb21Ub1JvdGF0aW9uO1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIC0gdGhlIGlkZW50aXR5IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZSgwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLklkZW50aXR5ID0gSWRlbnRpdHk7XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBldWxlciBhbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcm90YXRpb24uXG4gICAgICogSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV1bGVyQW5nbGVzKHEpIHtcbiAgICAgICAgY29uc3Qgb3V0ID0gVmVjdG9yM18xLlZlY3RvcjMuY3JlYXRlKCk7XG4gICAgICAgIC8vIGlmIHRoZSBpbnB1dCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgaXMgZXhhY3RseSBvbmUuIE90aGVyd2lzZSwgdGhpcyBhY3RzIGFzIGEgY29ycmVjdGlvbiBmYWN0b3IgZm9yIHRoZSBxdWF0ZXJuaW9uJ3Mgbm90LW5vcm1hbGl6ZWRuZXNzXG4gICAgICAgIGNvbnN0IHVuaXQgPSBxLnggKiBxLnggKyBxLnkgKiBxLnkgKyBxLnogKiBxLnogKyBxLncgKiBxLnc7XG4gICAgICAgIC8vIHEgd2lsbCBoYXZlIGEgbWFnbml0dWRlIG9mIDAuNSBvciBncmVhdGVyIGlmIGFuZCBvbmx5IGlmIHEgaXMgYSBzaW5ndWxhcml0eSBjYXNlXG4gICAgICAgIGNvbnN0IHRlc3QgPSBxLnggKiBxLncgLSBxLnkgKiBxLno7XG4gICAgICAgIGlmICh0ZXN0ID4gMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgbm9ydGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSBNYXRoLlBJIC8gMjtcbiAgICAgICAgICAgIG91dC55ID0gMiAqIE1hdGguYXRhbjIocS55LCBxLngpO1xuICAgICAgICAgICAgb3V0LnogPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRlc3QgPCAtMC40OTk1ICogdW5pdCkge1xuICAgICAgICAgICAgLy8gc2luZ3VsYXJpdHkgYXQgc291dGggcG9sZVxuICAgICAgICAgICAgb3V0LnggPSAtTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICBvdXQueSA9IC0yICogTWF0aC5hdGFuMihxLnksIHEueCk7XG4gICAgICAgICAgICBvdXQueiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBzaW5ndWxhcml0eSAtIHEgaXMgdGhlIG1ham9yaXR5IG9mIGNhc2VzXG4gICAgICAgICAgICBvdXQueCA9IE1hdGguYXNpbigyICogKHEudyAqIHEueCAtIHEueSAqIHEueikpO1xuICAgICAgICAgICAgb3V0LnkgPSBNYXRoLmF0YW4yKDIgKiBxLncgKiBxLnkgKyAyICogcS56ICogcS54LCAxIC0gMiAqIChxLnggKiBxLnggKyBxLnkgKiBxLnkpKTtcbiAgICAgICAgICAgIG91dC56ID0gTWF0aC5hdGFuMigyICogcS53ICogcS56ICsgMiAqIHEueCAqIHEueSwgMSAtIDIgKiAocS56ICogcS56ICsgcS54ICogcS54KSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0LnggKj0gdHlwZXNfMS5SQUQyREVHO1xuICAgICAgICBvdXQueSAqPSB0eXBlc18xLlJBRDJERUc7XG4gICAgICAgIG91dC56ICo9IHR5cGVzXzEuUkFEMkRFRztcbiAgICAgICAgLy8gZW5zdXJlIHRoZSBkZWdyZWUgdmFsdWVzIGFyZSBiZXR3ZWVuIDAgYW5kIDM2MFxuICAgICAgICBvdXQueCA9IFNjYWxhcl8xLlNjYWxhci5yZXBlYXQob3V0LngsIDM2MCk7XG4gICAgICAgIG91dC55ID0gU2NhbGFyXzEuU2NhbGFyLnJlcGVhdChvdXQueSwgMzYwKTtcbiAgICAgICAgb3V0LnogPSBTY2FsYXJfMS5TY2FsYXIucmVwZWF0KG91dC56LCAzNjApO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLmV1bGVyQW5nbGVzID0gZXVsZXJBbmdsZXM7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyByb3RhdGlvbiBmcm9tIHRoZSBnaXZlbiBFdWxlciBmbG9hdCBhbmdsZXMgKHksIHgsIHopIGFuZCBzdG9yZXMgaXQgaW4gdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHlhdyAtIGRlZmluZXMgdGhlIHJvdGF0aW9uIGFyb3VuZCBZIGF4aXNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWCBheGlzXG4gICAgICogQHBhcmFtIHJvbGwgLSBkZWZpbmVzIHRoZSByb3RhdGlvbiBhcm91bmQgWiBheGlzXG4gICAgICogQHBhcmFtIHJlc3VsdCAtIGRlZmluZXMgdGhlIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZih5YXcsIHBpdGNoLCByb2xsLCByZXN1bHQpIHtcbiAgICAgICAgLy8gSW1wbGVtZW50ZWQgdW5pdHktYmFzZWQgY2FsY3VsYXRpb25zIGZyb206IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81NjA1NTgxM1xuICAgICAgICBjb25zdCBoYWxmUGl0Y2ggPSBwaXRjaCAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZllhdyA9IHlhdyAqIDAuNTtcbiAgICAgICAgY29uc3QgaGFsZlJvbGwgPSByb2xsICogMC41O1xuICAgICAgICBjb25zdCBjMSA9IE1hdGguY29zKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IGMyID0gTWF0aC5jb3MoaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IGMzID0gTWF0aC5jb3MoaGFsZlJvbGwpO1xuICAgICAgICBjb25zdCBzMSA9IE1hdGguc2luKGhhbGZQaXRjaCk7XG4gICAgICAgIGNvbnN0IHMyID0gTWF0aC5zaW4oaGFsZllhdyk7XG4gICAgICAgIGNvbnN0IHMzID0gTWF0aC5zaW4oaGFsZlJvbGwpO1xuICAgICAgICByZXN1bHQueCA9IGMyICogczEgKiBjMyArIHMyICogYzEgKiBzMztcbiAgICAgICAgcmVzdWx0LnkgPSBzMiAqIGMxICogYzMgLSBjMiAqIHMxICogczM7XG4gICAgICAgIHJlc3VsdC56ID0gYzIgKiBjMSAqIHMzIC0gczIgKiBzMSAqIGMzO1xuICAgICAgICByZXN1bHQudyA9IGMyICogYzEgKiBjMyArIHMyICogczEgKiBzMztcbiAgICB9XG4gICAgUXVhdGVybmlvbi5yb3RhdGlvbllhd1BpdGNoUm9sbFRvUmVmID0gcm90YXRpb25ZYXdQaXRjaFJvbGxUb1JlZjtcbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBnaXZlbiBxdWF0ZXJuaW9uIHdpdGggdGhlIGdpdmVuIHJvdGF0aW9uIG1hdHJpeCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0gbWF0cml4IC0gZGVmaW5lcyB0aGUgc291cmNlIG1hdHJpeFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmKG1hdHJpeCwgcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtYXRyaXguX207XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlOm9uZS12YXJpYWJsZS1wZXItZGVjbGFyYXRpb25cbiAgICAgICAgY29uc3QgbTExID0gZGF0YVswXSwgbTEyID0gZGF0YVs0XSwgbTEzID0gZGF0YVs4XTtcbiAgICAgICAgY29uc3QgbTIxID0gZGF0YVsxXSwgbTIyID0gZGF0YVs1XSwgbTIzID0gZGF0YVs5XTtcbiAgICAgICAgY29uc3QgbTMxID0gZGF0YVsyXSwgbTMyID0gZGF0YVs2XSwgbTMzID0gZGF0YVsxMF07XG4gICAgICAgIC8vIHRzbGludDplbmFibGU6b25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblxuICAgICAgICBjb25zdCB0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcbiAgICAgICAgbGV0IHM7XG4gICAgICAgIGlmICh0cmFjZSA+IDApIHtcbiAgICAgICAgICAgIHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAwLjI1IC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gKG0zMiAtIG0yMykgKiBzO1xuICAgICAgICAgICAgcmVzdWx0LnkgPSAobTEzIC0gbTMxKSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjEgLSBtMTIpICogcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtMTEgPiBtMjIgJiYgbTExID4gbTMzKSB7XG4gICAgICAgICAgICBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XG4gICAgICAgICAgICByZXN1bHQudyA9IChtMzIgLSBtMjMpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC54ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gKG0xMyArIG0zMSkgLyBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG0yMiA+IG0zMykge1xuICAgICAgICAgICAgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMjIgLSBtMTEgLSBtMzMpO1xuICAgICAgICAgICAgcmVzdWx0LncgPSAobTEzIC0gbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueCA9IChtMTIgKyBtMjEpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC55ID0gMC4yNSAqIHM7XG4gICAgICAgICAgICByZXN1bHQueiA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcbiAgICAgICAgICAgIHJlc3VsdC53ID0gKG0yMSAtIG0xMikgLyBzO1xuICAgICAgICAgICAgcmVzdWx0LnggPSAobTEzICsgbTMxKSAvIHM7XG4gICAgICAgICAgICByZXN1bHQueSA9IChtMjMgKyBtMzIpIC8gcztcbiAgICAgICAgICAgIHJlc3VsdC56ID0gMC4yNSAqIHM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgUXVhdGVybmlvbi5mcm9tUm90YXRpb25NYXRyaXhUb1JlZiA9IGZyb21Sb3RhdGlvbk1hdHJpeFRvUmVmO1xuICAgIC8qKlxuICAgICAqIEludGVycG9sYXRlcyBiZXR3ZWVuIHR3byBxdWF0ZXJuaW9uc1xuICAgICAqIEBwYXJhbSBsZWZ0IC0gZGVmaW5lcyBmaXJzdCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIHJpZ2h0IC0gZGVmaW5lcyBzZWNvbmQgcXVhdGVybmlvblxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBkZWZpbmVzIHRoZSBncmFkaWVudCB0byB1c2VcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IGludGVycG9sYXRlZCBxdWF0ZXJuaW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2xlcnAobGVmdCwgcmlnaHQsIGFtb3VudCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZihsZWZ0LCByaWdodCwgYW1vdW50LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBRdWF0ZXJuaW9uLnNsZXJwID0gc2xlcnA7XG4gICAgLyoqXG4gICAgICogSW50ZXJwb2xhdGVzIGJldHdlZW4gdHdvIHF1YXRlcm5pb25zIGFuZCBzdG9yZXMgaXQgaW50byBhIHRhcmdldCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGxlZnQgLSBkZWZpbmVzIGZpcnN0IHF1YXRlcm5pb25cbiAgICAgKiBAcGFyYW0gcmlnaHQgLSBkZWZpbmVzIHNlY29uZCBxdWF0ZXJuaW9uXG4gICAgICogQHBhcmFtIGFtb3VudCAtIGRlZmluZXMgdGhlIGdyYWRpZW50IHRvIHVzZVxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsZXJwVG9SZWYobGVmdCwgcmlnaHQsIGFtb3VudCwgcmVzdWx0KSB7XG4gICAgICAgIGxldCBudW0yO1xuICAgICAgICBsZXQgbnVtMztcbiAgICAgICAgbGV0IG51bTQgPSBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xuICAgICAgICBpZiAobnVtNCA8IDApIHtcbiAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAgICAgbnVtNCA9IC1udW00O1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW00ID4gMC45OTk5OTkpIHtcbiAgICAgICAgICAgIG51bTMgPSAxIC0gYW1vdW50O1xuICAgICAgICAgICAgbnVtMiA9IGZsYWcgPyAtYW1vdW50IDogYW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbnVtNSA9IE1hdGguYWNvcyhudW00KTtcbiAgICAgICAgICAgIGNvbnN0IG51bTYgPSAxLjAgLyBNYXRoLnNpbihudW01KTtcbiAgICAgICAgICAgIG51bTMgPSBNYXRoLnNpbigoMS4wIC0gYW1vdW50KSAqIG51bTUpICogbnVtNjtcbiAgICAgICAgICAgIG51bTIgPSBmbGFnXG4gICAgICAgICAgICAgICAgPyAtTWF0aC5zaW4oYW1vdW50ICogbnVtNSkgKiBudW02XG4gICAgICAgICAgICAgICAgOiBNYXRoLnNpbihhbW91bnQgKiBudW01KSAqIG51bTY7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnggPSBudW0zICogbGVmdC54ICsgbnVtMiAqIHJpZ2h0Lng7XG4gICAgICAgIHJlc3VsdC55ID0gbnVtMyAqIGxlZnQueSArIG51bTIgKiByaWdodC55O1xuICAgICAgICByZXN1bHQueiA9IG51bTMgKiBsZWZ0LnogKyBudW0yICogcmlnaHQuejtcbiAgICAgICAgcmVzdWx0LncgPSBudW0zICogbGVmdC53ICsgbnVtMiAqIHJpZ2h0Lnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uc2xlcnBUb1JlZiA9IHNsZXJwVG9SZWY7XG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcXVhdGVybmlvbnNcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEByZXR1cm5zIGEgbmV3IHF1YXRlcm5pb24gc2V0IGFzIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseShzZWxmLCBxMSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGUoMCwgMCwgMCwgMS4wKTtcbiAgICAgICAgbXVsdGlwbHlUb1JlZihzZWxmLCBxMSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGdpdmVuIFwicmVzdWx0XCIgYXMgdGhlIHRoZSBtdWx0aXBsaWNhdGlvbiByZXN1bHQgb2YgdGhlIHNlbGYgb25lIHdpdGggdGhlIGdpdmVuIG9uZSBcInExXCJcbiAgICAgKiBAcGFyYW0gc2VsZiAtIGRlZmluZXMgdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgKiBAcGFyYW0gcTEgLSBkZWZpbmVzIHRoZSBzZWNvbmQgb3BlcmFuZFxuICAgICAqIEBwYXJhbSByZXN1bHQgLSBkZWZpbmVzIHRoZSB0YXJnZXQgcXVhdGVybmlvblxuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtdWx0aXBseVRvUmVmKHNlbGYsIHExLCByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0LnggPSBzZWxmLnggKiBxMS53ICsgc2VsZi55ICogcTEueiAtIHNlbGYueiAqIHExLnkgKyBzZWxmLncgKiBxMS54O1xuICAgICAgICByZXN1bHQueSA9IC1zZWxmLnggKiBxMS56ICsgc2VsZi55ICogcTEudyArIHNlbGYueiAqIHExLnggKyBzZWxmLncgKiBxMS55O1xuICAgICAgICByZXN1bHQueiA9IHNlbGYueCAqIHExLnkgLSBzZWxmLnkgKiBxMS54ICsgc2VsZi56ICogcTEudyArIHNlbGYudyAqIHExLno7XG4gICAgICAgIHJlc3VsdC53ID0gLXNlbGYueCAqIHExLnggLSBzZWxmLnkgKiBxMS55IC0gc2VsZi56ICogcTEueiArIHNlbGYudyAqIHExLnc7XG4gICAgfVxuICAgIFF1YXRlcm5pb24ubXVsdGlwbHlUb1JlZiA9IG11bHRpcGx5VG9SZWY7XG4gICAgZnVuY3Rpb24gYW5nbGVBeGlzKGRlZ3Jlc3MsIGF4aXMpIHtcbiAgICAgICAgaWYgKFZlY3RvcjNfMS5WZWN0b3IzLmxlbmd0aFNxdWFyZWQoYXhpcykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBRdWF0ZXJuaW9uLklkZW50aXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gSWRlbnRpdHkoKTtcbiAgICAgICAgbGV0IHJhZGlhbnMgPSBkZWdyZXNzICogdHlwZXNfMS5ERUcyUkFEO1xuICAgICAgICByYWRpYW5zICo9IDAuNTtcbiAgICAgICAgY29uc3QgYTIgPSBWZWN0b3IzXzEuVmVjdG9yMy5ub3JtYWxpemUoYXhpcyk7XG4gICAgICAgIFZlY3RvcjNfMS5WZWN0b3IzLnNjYWxlVG9SZWYoYTIsIE1hdGguc2luKHJhZGlhbnMpLCBhMik7XG4gICAgICAgIHJlc3VsdC54ID0gYTIueDtcbiAgICAgICAgcmVzdWx0LnkgPSBhMi55O1xuICAgICAgICByZXN1bHQueiA9IGEyLno7XG4gICAgICAgIHJlc3VsdC53ID0gTWF0aC5jb3MocmFkaWFucyk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemUocmVzdWx0KTtcbiAgICB9XG4gICAgUXVhdGVybmlvbi5hbmdsZUF4aXMgPSBhbmdsZUF4aXM7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHplcm8gZmlsbGVkIHF1YXRlcm5pb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBaZXJvKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlKDAuMCwgMC4wLCAwLjAsIDAuMCk7XG4gICAgfVxuICAgIFF1YXRlcm5pb24uWmVybyA9IFplcm87XG59KShRdWF0ZXJuaW9uID0gZXhwb3J0cy5RdWF0ZXJuaW9uIHx8IChleHBvcnRzLlF1YXRlcm5pb24gPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVhdGVybmlvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1F1YXRlcm5pb25cIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL1ZlY3RvcjNcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL3R5cGVzXCIpLCBleHBvcnRzKTtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi9pbmRleFwiKSwgZXhwb3J0cyk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcclxubW9kdWxlLmV4cG9ydHMgPSBhc1Byb21pc2U7XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5hc1Byb21pc2V9LlxyXG4gKiBAdHlwZWRlZiBhc1Byb21pc2VDYWxsYmFja1xyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueVxyXG4gKiBAcGFyYW0gey4uLip9IHBhcmFtcyBBZGRpdGlvbmFsIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSBmcm9tIGEgbm9kZS1zdHlsZSBjYWxsYmFjayBmdW5jdGlvbi5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHthc1Byb21pc2VDYWxsYmFja30gZm4gRnVuY3Rpb24gdG8gY2FsbFxyXG4gKiBAcGFyYW0geyp9IGN0eCBGdW5jdGlvbiBjb250ZXh0XHJcbiAqIEBwYXJhbSB7Li4uKn0gcGFyYW1zIEZ1bmN0aW9uIGFyZ3VtZW50c1xyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTwqPn0gUHJvbWlzaWZpZWQgZnVuY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGFzUHJvbWlzZShmbiwgY3R4LyosIHZhcmFyZ3MgKi8pIHtcclxuICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKSxcclxuICAgICAgICBvZmZzZXQgID0gMCxcclxuICAgICAgICBpbmRleCAgID0gMixcclxuICAgICAgICBwZW5kaW5nID0gdHJ1ZTtcclxuICAgIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpXHJcbiAgICAgICAgcGFyYW1zW29mZnNldCsrXSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBwYXJhbXNbb2Zmc2V0XSA9IGZ1bmN0aW9uIGNhbGxiYWNrKGVyci8qLCB2YXJhcmdzICovKSB7XHJcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBwZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHBhcmFtcy5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tvZmZzZXQrK10gPSBhcmd1bWVudHNbb2Zmc2V0XTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlLmFwcGx5KG51bGwsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGZuLmFwcGx5KGN0eCB8fCBudWxsLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgYmFzZTY0IGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgYXJyYXlzLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAbmFtZXNwYWNlXHJcbiAqL1xyXG52YXIgYmFzZTY0ID0gZXhwb3J0cztcclxuXHJcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBieXRlIGxlbmd0aCBvZiBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBCYXNlNjQgZW5jb2RlZCBzdHJpbmdcclxuICogQHJldHVybnMge251bWJlcn0gQnl0ZSBsZW5ndGhcclxuICovXHJcbmJhc2U2NC5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoc3RyaW5nKSB7XHJcbiAgICB2YXIgcCA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICBpZiAoIXApXHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB2YXIgbiA9IDA7XHJcbiAgICB3aGlsZSAoLS1wICUgNCA+IDEgJiYgc3RyaW5nLmNoYXJBdChwKSA9PT0gXCI9XCIpXHJcbiAgICAgICAgKytuO1xyXG4gICAgcmV0dXJuIE1hdGguY2VpbChzdHJpbmcubGVuZ3RoICogMykgLyA0IC0gbjtcclxufTtcclxuXHJcbi8vIEJhc2U2NCBlbmNvZGluZyB0YWJsZVxyXG52YXIgYjY0ID0gbmV3IEFycmF5KDY0KTtcclxuXHJcbi8vIEJhc2U2NCBkZWNvZGluZyB0YWJsZVxyXG52YXIgczY0ID0gbmV3IEFycmF5KDEyMyk7XHJcblxyXG4vLyA2NS4uOTAsIDk3Li4xMjIsIDQ4Li41NywgNDMsIDQ3XHJcbmZvciAodmFyIGkgPSAwOyBpIDwgNjQ7KVxyXG4gICAgczY0W2I2NFtpXSA9IGkgPCAyNiA/IGkgKyA2NSA6IGkgPCA1MiA/IGkgKyA3MSA6IGkgPCA2MiA/IGkgLSA0IDogaSAtIDU5IHwgNDNdID0gaSsrO1xyXG5cclxuLyoqXHJcbiAqIEVuY29kZXMgYSBidWZmZXIgdG8gYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IGVuY29kZWQgc3RyaW5nXHJcbiAqL1xyXG5iYXNlNjQuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKGJ1ZmZlciwgc3RhcnQsIGVuZCkge1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdO1xyXG4gICAgdmFyIGkgPSAwLCAvLyBvdXRwdXQgaW5kZXhcclxuICAgICAgICBqID0gMCwgLy8gZ290byBpbmRleFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHZhciBiID0gYnVmZmVyW3N0YXJ0KytdO1xyXG4gICAgICAgIHN3aXRjaCAoaikge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBjaHVua1tpKytdID0gYjY0W2IgPj4gMl07XHJcbiAgICAgICAgICAgICAgICB0ID0gKGIgJiAzKSA8PCA0O1xyXG4gICAgICAgICAgICAgICAgaiA9IDE7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA0XTtcclxuICAgICAgICAgICAgICAgIHQgPSAoYiAmIDE1KSA8PCAyO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2h1bmtbaSsrXSA9IGI2NFt0IHwgYiA+PiA2XTtcclxuICAgICAgICAgICAgICAgIGNodW5rW2krK10gPSBiNjRbYiAmIDYzXTtcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpID4gODE5MSkge1xyXG4gICAgICAgICAgICAocGFydHMgfHwgKHBhcnRzID0gW10pKS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjaHVuaykpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaikge1xyXG4gICAgICAgIGNodW5rW2krK10gPSBiNjRbdF07XHJcbiAgICAgICAgY2h1bmtbaSsrXSA9IDYxO1xyXG4gICAgICAgIGlmIChqID09PSAxKVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gNjE7XHJcbiAgICB9XHJcbiAgICBpZiAocGFydHMpIHtcclxuICAgICAgICBpZiAoaSlcclxuICAgICAgICAgICAgcGFydHMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpKTtcclxuICAgICAgICByZXR1cm4gcGFydHMuam9pbihcIlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmsuc2xpY2UoMCwgaSkpO1xyXG59O1xyXG5cclxudmFyIGludmFsaWRFbmNvZGluZyA9IFwiaW52YWxpZCBlbmNvZGluZ1wiO1xyXG5cclxuLyoqXHJcbiAqIERlY29kZXMgYSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcgdG8gYSBidWZmZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU291cmNlIHN0cmluZ1xyXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ1ZmZlciBEZXN0aW5hdGlvbiBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBEZXN0aW5hdGlvbiBvZmZzZXRcclxuICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW5cclxuICogQHRocm93cyB7RXJyb3J9IElmIGVuY29kaW5nIGlzIGludmFsaWRcclxuICovXHJcbmJhc2U2NC5kZWNvZGUgPSBmdW5jdGlvbiBkZWNvZGUoc3RyaW5nLCBidWZmZXIsIG9mZnNldCkge1xyXG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0O1xyXG4gICAgdmFyIGogPSAwLCAvLyBnb3RvIGluZGV4XHJcbiAgICAgICAgdDsgICAgIC8vIHRlbXBvcmFyeVxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOykge1xyXG4gICAgICAgIHZhciBjID0gc3RyaW5nLmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoYyA9PT0gNjEgJiYgaiA+IDEpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGlmICgoYyA9IHM2NFtjXSkgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gdCA8PCAyIHwgKGMgJiA0OCkgPj4gNDtcclxuICAgICAgICAgICAgICAgIHQgPSBjO1xyXG4gICAgICAgICAgICAgICAgaiA9IDI7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9ICh0ICYgMTUpIDw8IDQgfCAoYyAmIDYwKSA+PiAyO1xyXG4gICAgICAgICAgICAgICAgdCA9IGM7XHJcbiAgICAgICAgICAgICAgICBqID0gMztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gKHQgJiAzKSA8PCA2IHwgYztcclxuICAgICAgICAgICAgICAgIGogPSAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGogPT09IDEpXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEVuY29kaW5nKTtcclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBhcHBlYXJzIHRvIGJlIGJhc2U2NCBlbmNvZGVkLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byB0ZXN0XHJcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgcHJvYmFibHkgYmFzZTY0IGVuY29kZWQsIG90aGVyd2lzZSBmYWxzZVxyXG4gKi9cclxuYmFzZTY0LnRlc3QgPSBmdW5jdGlvbiB0ZXN0KHN0cmluZykge1xyXG4gICAgcmV0dXJuIC9eKD86W0EtWmEtejAtOSsvXXs0fSkqKD86W0EtWmEtejAtOSsvXXsyfT09fFtBLVphLXowLTkrL117M309KT8kLy50ZXN0KHN0cmluZyk7XHJcbn07XHJcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGV2ZW50IGVtaXR0ZXIgaW5zdGFuY2UuXHJcbiAqIEBjbGFzc2Rlc2MgQSBtaW5pbWFsIGV2ZW50IGVtaXR0ZXIuXHJcbiAqIEBtZW1iZXJvZiB1dGlsXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXHJcbiAgICAgKiBAdHlwZSB7T2JqZWN0LjxzdHJpbmcsKj59XHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBsaXN0ZW5lci5cclxuICogQHBhcmFtIHtzdHJpbmd9IGV2dCBFdmVudCBuYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIExpc3RlbmVyXHJcbiAqIEBwYXJhbSB7Kn0gW2N0eF0gTGlzdGVuZXIgY29udGV4dFxyXG4gKiBAcmV0dXJucyB7dXRpbC5FdmVudEVtaXR0ZXJ9IGB0aGlzYFxyXG4gKi9cclxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IGZ1bmN0aW9uIG9uKGV2dCwgZm4sIGN0eCkge1xyXG4gICAgKHRoaXMuX2xpc3RlbmVyc1tldnRdIHx8ICh0aGlzLl9saXN0ZW5lcnNbZXZ0XSA9IFtdKSkucHVzaCh7XHJcbiAgICAgICAgZm4gIDogZm4sXHJcbiAgICAgICAgY3R4IDogY3R4IHx8IHRoaXNcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBvciBhbnkgbWF0Y2hpbmcgbGlzdGVuZXJzIGlmIGFyZ3VtZW50cyBhcmUgb21pdHRlZC5cclxuICogQHBhcmFtIHtzdHJpbmd9IFtldnRdIEV2ZW50IG5hbWUuIFJlbW92ZXMgYWxsIGxpc3RlbmVycyBpZiBvbWl0dGVkLlxyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbZm5dIExpc3RlbmVyIHRvIHJlbW92ZS4gUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIG9mIGBldnRgIGlmIG9taXR0ZWQuXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IGZ1bmN0aW9uIG9mZihldnQsIGZuKSB7XHJcbiAgICBpZiAoZXZ0ID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBpZiAoZm4gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzW2V2dF0gPSBbXTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICAgICAgaWYgKGxpc3RlbmVyc1tpXS5mbiA9PT0gZm4pXHJcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICArK2k7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbn07XHJcblxyXG4vKipcclxuICogRW1pdHMgYW4gZXZlbnQgYnkgY2FsbGluZyBpdHMgbGlzdGVuZXJzIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldnQgRXZlbnQgbmFtZVxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzXHJcbiAqIEByZXR1cm5zIHt1dGlsLkV2ZW50RW1pdHRlcn0gYHRoaXNgXHJcbiAqL1xyXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2dCkge1xyXG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1tldnRdO1xyXG4gICAgaWYgKGxpc3RlbmVycykge1xyXG4gICAgICAgIHZhciBhcmdzID0gW10sXHJcbiAgICAgICAgICAgIGkgPSAxO1xyXG4gICAgICAgIGZvciAoOyBpIDwgYXJndW1lbnRzLmxlbmd0aDspXHJcbiAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7KVxyXG4gICAgICAgICAgICBsaXN0ZW5lcnNbaV0uZm4uYXBwbHkobGlzdGVuZXJzW2krK10uY3R4LCBhcmdzKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShmYWN0b3J5KTtcclxuXHJcbi8qKlxyXG4gKiBSZWFkcyAvIHdyaXRlcyBmbG9hdHMgLyBkb3VibGVzIGZyb20gLyB0byBidWZmZXJzLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0XHJcbiAqIEBuYW1lc3BhY2VcclxuICovXHJcblxyXG4vKipcclxuICogV3JpdGVzIGEgMzIgYml0IGZsb2F0IHRvIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC53cml0ZUZsb2F0TEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDMyIGJpdCBmbG9hdCB0byBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQud3JpdGVGbG9hdEJFXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsIFZhbHVlIHRvIHdyaXRlXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFRhcmdldCBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBUYXJnZXQgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBSZWFkcyBhIDMyIGJpdCBmbG9hdCBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRmxvYXRMRVxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgU291cmNlIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFNvdXJjZSBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcclxuICovXHJcblxyXG4vKipcclxuICogUmVhZHMgYSAzMiBiaXQgZmxvYXQgZnJvbSBhIGJ1ZmZlciB1c2luZyBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuXHJcbiAqIEBuYW1lIHV0aWwuZmxvYXQucmVhZEZsb2F0QkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgbGl0dGxlIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFdyaXRlcyBhIDY0IGJpdCBkb3VibGUgdG8gYSBidWZmZXIgdXNpbmcgYmlnIGVuZGlhbiBieXRlIG9yZGVyLlxyXG4gKiBAbmFtZSB1dGlsLmZsb2F0LndyaXRlRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgVmFsdWUgdG8gd3JpdGVcclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWYgVGFyZ2V0IGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gcG9zIFRhcmdldCBidWZmZXIgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGxpdHRsZSBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlTEVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIGEgNjQgYml0IGRvdWJsZSBmcm9tIGEgYnVmZmVyIHVzaW5nIGJpZyBlbmRpYW4gYnl0ZSBvcmRlci5cclxuICogQG5hbWUgdXRpbC5mbG9hdC5yZWFkRG91YmxlQkVcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHBvcyBTb3VyY2UgYnVmZmVyIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXHJcbiAqL1xyXG5cclxuLy8gRmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2Ygbm9kZS1iYXNlZCB0ZXN0aW5nIGluIG1vZGlmaWVkIGdsb2JhbCBlbnZpcm9ubWVudHNcclxuZnVuY3Rpb24gZmFjdG9yeShleHBvcnRzKSB7XHJcblxyXG4gICAgLy8gZmxvYXQ6IHR5cGVkIGFycmF5XHJcbiAgICBpZiAodHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gXCJ1bmRlZmluZWRcIikgKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgZjMyID0gbmV3IEZsb2F0MzJBcnJheShbIC0wIF0pLFxyXG4gICAgICAgICAgICBmOGIgPSBuZXcgVWludDhBcnJheShmMzIuYnVmZmVyKSxcclxuICAgICAgICAgICAgbGUgID0gZjhiWzNdID09PSAxMjg7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHdyaXRlRmxvYXRfZjMyX2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGYzMlswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9mMzJfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjMyWzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbM107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzFdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVGbG9hdExFID0gbGUgPyB3cml0ZUZsb2F0X2YzMl9jcHkgOiB3cml0ZUZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IGxlID8gd3JpdGVGbG9hdF9mMzJfcmV2IDogd3JpdGVGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiByZWFkRmxvYXRfZjMyX3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsyXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzFdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIHJldHVybiBmMzJbMF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSBsZSA/IHJlYWRGbG9hdF9mMzJfY3B5IDogcmVhZEZsb2F0X2YzMl9yZXY7XHJcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cclxuICAgICAgICBleHBvcnRzLnJlYWRGbG9hdEJFID0gbGUgPyByZWFkRmxvYXRfZjMyX3JldiA6IHJlYWRGbG9hdF9mMzJfY3B5O1xyXG5cclxuICAgIC8vIGZsb2F0OiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVGbG9hdF9pZWVlNzU0KHdyaXRlVWludCwgdmFsLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IHZhbCA8IDAgPyAxIDogMDtcclxuICAgICAgICAgICAgaWYgKHNpZ24pXHJcbiAgICAgICAgICAgICAgICB2YWwgPSAtdmFsO1xyXG4gICAgICAgICAgICBpZiAodmFsID09PSAwKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDEgLyB2YWwgPiAwID8gLyogcG9zaXRpdmUgKi8gMCA6IC8qIG5lZ2F0aXZlIDAgKi8gMjE0NzQ4MzY0OCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpc05hTih2YWwpKVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDMyODkzNDQsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsID4gMy40MDI4MjM0NjYzODUyODg2ZSszOCkgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgMjEzOTA5NTA0MCkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgMS4xNzU0OTQzNTA4MjIyODc1ZS0zOCkgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgoc2lnbiA8PCAzMSB8IE1hdGgucm91bmQodmFsIC8gMS40MDEyOTg0NjQzMjQ4MTdlLTQ1KSkgPj4+IDAsIGJ1ZiwgcG9zKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMiksXHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSBNYXRoLnJvdW5kKHZhbCAqIE1hdGgucG93KDIsIC1leHBvbmVudCkgKiA4Mzg4NjA4KSAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBleHBvbmVudCArIDEyNyA8PCAyMyB8IG1hbnRpc3NhKSA+Pj4gMCwgYnVmLCBwb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRMRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludExFKTtcclxuICAgICAgICBleHBvcnRzLndyaXRlRmxvYXRCRSA9IHdyaXRlRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZEZsb2F0X2llZWU3NTQocmVhZFVpbnQsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIHZhciB1aW50ID0gcmVhZFVpbnQoYnVmLCBwb3MpLFxyXG4gICAgICAgICAgICAgICAgc2lnbiA9ICh1aW50ID4+IDMxKSAqIDIgKyAxLFxyXG4gICAgICAgICAgICAgICAgZXhwb25lbnQgPSB1aW50ID4+PiAyMyAmIDI1NSxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdWludCAmIDgzODg2MDc7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjU1XHJcbiAgICAgICAgICAgICAgICA/IG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA/IE5hTlxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogSW5maW5pdHlcclxuICAgICAgICAgICAgICAgIDogZXhwb25lbnQgPT09IDAgLy8gZGVub3JtYWxcclxuICAgICAgICAgICAgICAgID8gc2lnbiAqIDEuNDAxMjk4NDY0MzI0ODE3ZS00NSAqIG1hbnRpc3NhXHJcbiAgICAgICAgICAgICAgICA6IHNpZ24gKiBNYXRoLnBvdygyLCBleHBvbmVudCAtIDE1MCkgKiAobWFudGlzc2EgKyA4Mzg4NjA4KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0TEUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50TEUpO1xyXG4gICAgICAgIGV4cG9ydHMucmVhZEZsb2F0QkUgPSByZWFkRmxvYXRfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUpO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgLy8gZG91YmxlOiB0eXBlZCBhcnJheVxyXG4gICAgaWYgKHR5cGVvZiBGbG9hdDY0QXJyYXkgIT09IFwidW5kZWZpbmVkXCIpIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIGY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoWy0wXSksXHJcbiAgICAgICAgICAgIGY4YiA9IG5ldyBVaW50OEFycmF5KGY2NC5idWZmZXIpLFxyXG4gICAgICAgICAgICBsZSAgPSBmOGJbN10gPT09IDEyODtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfZjY0X2NweSh2YWwsIGJ1ZiwgcG9zKSB7XHJcbiAgICAgICAgICAgIGY2NFswXSA9IHZhbDtcclxuICAgICAgICAgICAgYnVmW3BvcyAgICBdID0gZjhiWzBdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgMV0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAyXSA9IGY4YlsyXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDNdID0gZjhiWzNdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNF0gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA1XSA9IGY4Yls1XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDZdID0gZjhiWzZdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgN10gPSBmOGJbN107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiB3cml0ZURvdWJsZV9mNjRfcmV2KHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgZjY0WzBdID0gdmFsO1xyXG4gICAgICAgICAgICBidWZbcG9zICAgIF0gPSBmOGJbN107XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyAxXSA9IGY4Yls2XTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDJdID0gZjhiWzVdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgM10gPSBmOGJbNF07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA0XSA9IGY4YlszXTtcclxuICAgICAgICAgICAgYnVmW3BvcyArIDVdID0gZjhiWzJdO1xyXG4gICAgICAgICAgICBidWZbcG9zICsgNl0gPSBmOGJbMV07XHJcbiAgICAgICAgICAgIGJ1Zltwb3MgKyA3XSA9IGY4YlswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUxFID0gbGUgPyB3cml0ZURvdWJsZV9mNjRfY3B5IDogd3JpdGVEb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVCRSA9IGxlID8gd3JpdGVEb3VibGVfZjY0X3JldiA6IHdyaXRlRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X2NweShidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbMF0gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4YlsxXSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbM10gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4Yls0XSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbNl0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4Yls3XSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHJlYWREb3VibGVfZjY0X3JldihidWYsIHBvcykge1xyXG4gICAgICAgICAgICBmOGJbN10gPSBidWZbcG9zICAgIF07XHJcbiAgICAgICAgICAgIGY4Yls2XSA9IGJ1Zltwb3MgKyAxXTtcclxuICAgICAgICAgICAgZjhiWzVdID0gYnVmW3BvcyArIDJdO1xyXG4gICAgICAgICAgICBmOGJbNF0gPSBidWZbcG9zICsgM107XHJcbiAgICAgICAgICAgIGY4YlszXSA9IGJ1Zltwb3MgKyA0XTtcclxuICAgICAgICAgICAgZjhiWzJdID0gYnVmW3BvcyArIDVdO1xyXG4gICAgICAgICAgICBmOGJbMV0gPSBidWZbcG9zICsgNl07XHJcbiAgICAgICAgICAgIGY4YlswXSA9IGJ1Zltwb3MgKyA3XTtcclxuICAgICAgICAgICAgcmV0dXJuIGY2NFswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSBsZSA/IHJlYWREb3VibGVfZjY0X2NweSA6IHJlYWREb3VibGVfZjY0X3JldjtcclxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xyXG4gICAgICAgIGV4cG9ydHMucmVhZERvdWJsZUJFID0gbGUgPyByZWFkRG91YmxlX2Y2NF9yZXYgOiByZWFkRG91YmxlX2Y2NF9jcHk7XHJcblxyXG4gICAgLy8gZG91YmxlOiBpZWVlNzU0XHJcbiAgICB9KSgpOyBlbHNlIChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gd3JpdGVEb3VibGVfaWVlZTc1NCh3cml0ZVVpbnQsIG9mZjAsIG9mZjEsIHZhbCwgYnVmLCBwb3MpIHtcclxuICAgICAgICAgICAgdmFyIHNpZ24gPSB2YWwgPCAwID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGlmIChzaWduKVxyXG4gICAgICAgICAgICAgICAgdmFsID0gLXZhbDtcclxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoMSAvIHZhbCA+IDAgPyAvKiBwb3NpdGl2ZSAqLyAwIDogLyogbmVnYXRpdmUgMCAqLyAyMTQ3NDgzNjQ4LCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIHdyaXRlVWludCgwLCBidWYsIHBvcyArIG9mZjApO1xyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDIxNDY5NTkzNjAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpIHsgLy8gKy1JbmZpbml0eVxyXG4gICAgICAgICAgICAgICAgd3JpdGVVaW50KDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCAyMTQ2NDM1MDcyKSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYW50aXNzYTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgeyAvLyBkZW5vcm1hbFxyXG4gICAgICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gdmFsIC8gNWUtMzI0O1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSA+Pj4gMCwgYnVmLCBwb3MgKyBvZmYwKTtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZVVpbnQoKHNpZ24gPDwgMzEgfCBtYW50aXNzYSAvIDQyOTQ5NjcyOTYpID4+PiAwLCBidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb25lbnQgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbCkgLyBNYXRoLkxOMik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9uZW50ID09PSAxMDI0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudCA9IDEwMjM7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFudGlzc2EgPSB2YWwgKiBNYXRoLnBvdygyLCAtZXhwb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVWludChtYW50aXNzYSAqIDQ1MDM1OTk2MjczNzA0OTYgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVVaW50KChzaWduIDw8IDMxIHwgZXhwb25lbnQgKyAxMDIzIDw8IDIwIHwgbWFudGlzc2EgKiAxMDQ4NTc2ICYgMTA0ODU3NSkgPj4+IDAsIGJ1ZiwgcG9zICsgb2ZmMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV4cG9ydHMud3JpdGVEb3VibGVMRSA9IHdyaXRlRG91YmxlX2llZWU3NTQuYmluZChudWxsLCB3cml0ZVVpbnRMRSwgMCwgNCk7XHJcbiAgICAgICAgZXhwb3J0cy53cml0ZURvdWJsZUJFID0gd3JpdGVEb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHdyaXRlVWludEJFLCA0LCAwKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcmVhZERvdWJsZV9pZWVlNzU0KHJlYWRVaW50LCBvZmYwLCBvZmYxLCBidWYsIHBvcykge1xyXG4gICAgICAgICAgICB2YXIgbG8gPSByZWFkVWludChidWYsIHBvcyArIG9mZjApLFxyXG4gICAgICAgICAgICAgICAgaGkgPSByZWFkVWludChidWYsIHBvcyArIG9mZjEpO1xyXG4gICAgICAgICAgICB2YXIgc2lnbiA9IChoaSA+PiAzMSkgKiAyICsgMSxcclxuICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gaGkgPj4+IDIwICYgMjA0NyxcclxuICAgICAgICAgICAgICAgIG1hbnRpc3NhID0gNDI5NDk2NzI5NiAqIChoaSAmIDEwNDg1NzUpICsgbG87XHJcbiAgICAgICAgICAgIHJldHVybiBleHBvbmVudCA9PT0gMjA0N1xyXG4gICAgICAgICAgICAgICAgPyBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgPyBOYU5cclxuICAgICAgICAgICAgICAgIDogc2lnbiAqIEluZmluaXR5XHJcbiAgICAgICAgICAgICAgICA6IGV4cG9uZW50ID09PSAwIC8vIGRlbm9ybWFsXHJcbiAgICAgICAgICAgICAgICA/IHNpZ24gKiA1ZS0zMjQgKiBtYW50aXNzYVxyXG4gICAgICAgICAgICAgICAgOiBzaWduICogTWF0aC5wb3coMiwgZXhwb25lbnQgLSAxMDc1KSAqIChtYW50aXNzYSArIDQ1MDM1OTk2MjczNzA0OTYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZXhwb3J0cy5yZWFkRG91YmxlTEUgPSByZWFkRG91YmxlX2llZWU3NTQuYmluZChudWxsLCByZWFkVWludExFLCAwLCA0KTtcclxuICAgICAgICBleHBvcnRzLnJlYWREb3VibGVCRSA9IHJlYWREb3VibGVfaWVlZTc1NC5iaW5kKG51bGwsIHJlYWRVaW50QkUsIDQsIDApO1xyXG5cclxuICAgIH0pKCk7XHJcblxyXG4gICAgcmV0dXJuIGV4cG9ydHM7XHJcbn1cclxuXHJcbi8vIHVpbnQgaGVscGVyc1xyXG5cclxuZnVuY3Rpb24gd3JpdGVVaW50TEUodmFsLCBidWYsIHBvcykge1xyXG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMV0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAyXSA9ICB2YWwgPj4+IDE2ICYgMjU1O1xyXG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyaXRlVWludEJFKHZhbCwgYnVmLCBwb3MpIHtcclxuICAgIGJ1Zltwb3MgICAgXSA9ICB2YWwgPj4+IDI0O1xyXG4gICAgYnVmW3BvcyArIDFdID0gIHZhbCA+Pj4gMTYgJiAyNTU7XHJcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiA4ICAmIDI1NTtcclxuICAgIGJ1Zltwb3MgKyAzXSA9ICB2YWwgICAgICAgICYgMjU1O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWFkVWludExFKGJ1ZiwgcG9zKSB7XHJcbiAgICByZXR1cm4gKGJ1Zltwb3MgICAgXVxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMV0gPDwgOFxyXG4gICAgICAgICAgfCBidWZbcG9zICsgMl0gPDwgMTZcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDNdIDw8IDI0KSA+Pj4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVhZFVpbnRCRShidWYsIHBvcykge1xyXG4gICAgcmV0dXJuIChidWZbcG9zICAgIF0gPDwgMjRcclxuICAgICAgICAgIHwgYnVmW3BvcyArIDFdIDw8IDE2XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAyXSA8PCA4XHJcbiAgICAgICAgICB8IGJ1Zltwb3MgKyAzXSkgPj4+IDA7XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gaW5xdWlyZTtcclxuXHJcbi8qKlxyXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSBvbmx5IGlmIGF2YWlsYWJsZS5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZU5hbWUgTW9kdWxlIHRvIHJlcXVpcmVcclxuICogQHJldHVybnMgez9PYmplY3R9IFJlcXVpcmVkIG1vZHVsZSBpZiBhdmFpbGFibGUgYW5kIG5vdCBlbXB0eSwgb3RoZXJ3aXNlIGBudWxsYFxyXG4gKi9cclxuZnVuY3Rpb24gaW5xdWlyZShtb2R1bGVOYW1lKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciBtb2QgPSBldmFsKFwicXVpcmVcIi5yZXBsYWNlKC9eLyxcInJlXCIpKShtb2R1bGVOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXHJcbiAgICAgICAgaWYgKG1vZCAmJiAobW9kLmxlbmd0aCB8fCBPYmplY3Qua2V5cyhtb2QpLmxlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiBtb2Q7XHJcbiAgICB9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBIG1pbmltYWwgVVRGOCBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIGFycmF5cy5cclxuICogQG1lbWJlcm9mIHV0aWxcclxuICogQG5hbWVzcGFjZVxyXG4gKi9cclxudmFyIHV0ZjggPSBleHBvcnRzO1xyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFVURjggYnl0ZSBsZW5ndGggb2YgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEJ5dGUgbGVuZ3RoXHJcbiAqL1xyXG51dGY4Lmxlbmd0aCA9IGZ1bmN0aW9uIHV0ZjhfbGVuZ3RoKHN0cmluZykge1xyXG4gICAgdmFyIGxlbiA9IDAsXHJcbiAgICAgICAgYyA9IDA7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICBpZiAoYyA8IDEyOClcclxuICAgICAgICAgICAgbGVuICs9IDE7XHJcbiAgICAgICAgZWxzZSBpZiAoYyA8IDIwNDgpXHJcbiAgICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIGVsc2UgaWYgKChjICYgMHhGQzAwKSA9PT0gMHhEODAwICYmIChzdHJpbmcuY2hhckNvZGVBdChpICsgMSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBsZW4gKz0gNDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgbGVuICs9IDM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIFVURjggYnl0ZXMgYXMgYSBzdHJpbmcuXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIFNvdXJjZSBidWZmZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFNvdXJjZSBzdGFydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFNvdXJjZSBlbmRcclxuICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nIHJlYWRcclxuICovXHJcbnV0ZjgucmVhZCA9IGZ1bmN0aW9uIHV0ZjhfcmVhZChidWZmZXIsIHN0YXJ0LCBlbmQpIHtcclxuICAgIHZhciBsZW4gPSBlbmQgLSBzdGFydDtcclxuICAgIGlmIChsZW4gPCAxKVxyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgdmFyIHBhcnRzID0gbnVsbCxcclxuICAgICAgICBjaHVuayA9IFtdLFxyXG4gICAgICAgIGkgPSAwLCAvLyBjaGFyIG9mZnNldFxyXG4gICAgICAgIHQ7ICAgICAvLyB0ZW1wb3JhcnlcclxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xyXG4gICAgICAgIHQgPSBidWZmZXJbc3RhcnQrK107XHJcbiAgICAgICAgaWYgKHQgPCAxMjgpXHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSB0O1xyXG4gICAgICAgIGVsc2UgaWYgKHQgPiAxOTEgJiYgdCA8IDIyNClcclxuICAgICAgICAgICAgY2h1bmtbaSsrXSA9ICh0ICYgMzEpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBlbHNlIGlmICh0ID4gMjM5ICYmIHQgPCAzNjUpIHtcclxuICAgICAgICAgICAgdCA9ICgodCAmIDcpIDw8IDE4IHwgKGJ1ZmZlcltzdGFydCsrXSAmIDYzKSA8PCAxMiB8IChidWZmZXJbc3RhcnQrK10gJiA2MykgPDwgNiB8IGJ1ZmZlcltzdGFydCsrXSAmIDYzKSAtIDB4MTAwMDA7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweEQ4MDAgKyAodCA+PiAxMCk7XHJcbiAgICAgICAgICAgIGNodW5rW2krK10gPSAweERDMDAgKyAodCAmIDEwMjMpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBjaHVua1tpKytdID0gKHQgJiAxNSkgPDwgMTIgfCAoYnVmZmVyW3N0YXJ0KytdICYgNjMpIDw8IDYgfCBidWZmZXJbc3RhcnQrK10gJiA2MztcclxuICAgICAgICBpZiAoaSA+IDgxOTEpIHtcclxuICAgICAgICAgICAgKHBhcnRzIHx8IChwYXJ0cyA9IFtdKSkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY2h1bmspKTtcclxuICAgICAgICAgICAgaSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBhcnRzKSB7XHJcbiAgICAgICAgaWYgKGkpXHJcbiAgICAgICAgICAgIHBhcnRzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcnRzLmpvaW4oXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNodW5rLnNsaWNlKDAsIGkpKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBXcml0ZXMgYSBzdHJpbmcgYXMgVVRGOCBieXRlcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmZmVyIERlc3RpbmF0aW9uIGJ1ZmZlclxyXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IERlc3RpbmF0aW9uIG9mZnNldFxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBCeXRlcyB3cml0dGVuXHJcbiAqL1xyXG51dGY4LndyaXRlID0gZnVuY3Rpb24gdXRmOF93cml0ZShzdHJpbmcsIGJ1ZmZlciwgb2Zmc2V0KSB7XHJcbiAgICB2YXIgc3RhcnQgPSBvZmZzZXQsXHJcbiAgICAgICAgYzEsIC8vIGNoYXJhY3RlciAxXHJcbiAgICAgICAgYzI7IC8vIGNoYXJhY3RlciAyXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGMxID0gc3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgaWYgKGMxIDwgMTI4KSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGMxIDwgMjA0OCkge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gNiAgICAgICB8IDE5MjtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxICAgICAgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoYzEgJiAweEZDMDApID09PSAweEQ4MDAgJiYgKChjMiA9IHN0cmluZy5jaGFyQ29kZUF0KGkgKyAxKSkgJiAweEZDMDApID09PSAweERDMDApIHtcclxuICAgICAgICAgICAgYzEgPSAweDEwMDAwICsgKChjMSAmIDB4MDNGRikgPDwgMTApICsgKGMyICYgMHgwM0ZGKTtcclxuICAgICAgICAgICAgKytpO1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTggICAgICB8IDI0MDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDEyICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSA+PiA2ICAmIDYzIHwgMTI4O1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgICAgICAgJiA2MyB8IDEyODtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBidWZmZXJbb2Zmc2V0KytdID0gYzEgPj4gMTIgICAgICB8IDIyNDtcclxuICAgICAgICAgICAgYnVmZmVyW29mZnNldCsrXSA9IGMxID4+IDYgICYgNjMgfCAxMjg7XHJcbiAgICAgICAgICAgIGJ1ZmZlcltvZmZzZXQrK10gPSBjMSAgICAgICAmIDYzIHwgMTI4O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZmZzZXQgLSBzdGFydDtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbm1vZHVsZS5leHBvcnRzID0gcG9vbDtcclxuXHJcbi8qKlxyXG4gKiBBbiBhbGxvY2F0b3IgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbEFsbG9jYXRvclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIEJ1ZmZlciBzaXplXHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXJcclxuICovXHJcblxyXG4vKipcclxuICogQSBzbGljZXIgYXMgdXNlZCBieSB7QGxpbmsgdXRpbC5wb29sfS5cclxuICogQHR5cGVkZWYgUG9vbFNsaWNlclxyXG4gKiBAdHlwZSB7ZnVuY3Rpb259XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBTdGFydCBvZmZzZXRcclxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBFbmQgb2Zmc2V0XHJcbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBCdWZmZXIgc2xpY2VcclxuICogQHRoaXMge1VpbnQ4QXJyYXl9XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEEgZ2VuZXJhbCBwdXJwb3NlIGJ1ZmZlciBwb29sLlxyXG4gKiBAbWVtYmVyb2YgdXRpbFxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtQb29sQWxsb2NhdG9yfSBhbGxvYyBBbGxvY2F0b3JcclxuICogQHBhcmFtIHtQb29sU2xpY2VyfSBzbGljZSBTbGljZXJcclxuICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTgxOTJdIFNsYWIgc2l6ZVxyXG4gKiBAcmV0dXJucyB7UG9vbEFsbG9jYXRvcn0gUG9vbGVkIGFsbG9jYXRvclxyXG4gKi9cclxuZnVuY3Rpb24gcG9vbChhbGxvYywgc2xpY2UsIHNpemUpIHtcclxuICAgIHZhciBTSVpFICAgPSBzaXplIHx8IDgxOTI7XHJcbiAgICB2YXIgTUFYICAgID0gU0laRSA+Pj4gMTtcclxuICAgIHZhciBzbGFiICAgPSBudWxsO1xyXG4gICAgdmFyIG9mZnNldCA9IFNJWkU7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gcG9vbF9hbGxvYyhzaXplKSB7XHJcbiAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiBNQVgpXHJcbiAgICAgICAgICAgIHJldHVybiBhbGxvYyhzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IFNJWkUpIHtcclxuICAgICAgICAgICAgc2xhYiA9IGFsbG9jKFNJWkUpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYnVmID0gc2xpY2UuY2FsbChzbGFiLCBvZmZzZXQsIG9mZnNldCArPSBzaXplKTtcclxuICAgICAgICBpZiAob2Zmc2V0ICYgNykgLy8gYWxpZ24gdG8gMzIgYml0XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChvZmZzZXQgfCA3KSArIDE7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZjtcclxuICAgIH07XHJcbn1cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IExvbmdCaXRzO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuLi91dGlsL21pbmltYWxcIik7XG5cbi8qKlxuICogQ29uc3RydWN0cyBuZXcgbG9uZyBiaXRzLlxuICogQGNsYXNzZGVzYyBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbG93IGFuZCBoaWdoIGJpdHMgb2YgYSA2NCBiaXQgdmFsdWUuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge251bWJlcn0gbG8gTG93IDMyIGJpdHMsIHVuc2lnbmVkXG4gKiBAcGFyYW0ge251bWJlcn0gaGkgSGlnaCAzMiBiaXRzLCB1bnNpZ25lZFxuICovXG5mdW5jdGlvbiBMb25nQml0cyhsbywgaGkpIHtcblxuICAgIC8vIG5vdGUgdGhhdCB0aGUgY2FzdHMgYmVsb3cgYXJlIHRoZW9yZXRpY2FsbHkgdW5uZWNlc3NhcnkgYXMgb2YgdG9kYXksIGJ1dCBvbGRlciBzdGF0aWNhbGx5XG4gICAgLy8gZ2VuZXJhdGVkIGNvbnZlcnRlciBjb2RlIG1pZ2h0IHN0aWxsIGNhbGwgdGhlIGN0b3Igd2l0aCBzaWduZWQgMzJiaXRzLiBrZXB0IGZvciBjb21wYXQuXG5cbiAgICAvKipcbiAgICAgKiBMb3cgYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubG8gPSBsbyA+Pj4gMDtcblxuICAgIC8qKlxuICAgICAqIEhpZ2ggYml0cy5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMuaGkgPSBoaSA+Pj4gMDtcbn1cblxuLyoqXG4gKiBaZXJvIGJpdHMuXG4gKiBAbWVtYmVyb2YgdXRpbC5Mb25nQml0c1xuICogQHR5cGUge3V0aWwuTG9uZ0JpdHN9XG4gKi9cbnZhciB6ZXJvID0gTG9uZ0JpdHMuemVybyA9IG5ldyBMb25nQml0cygwLCAwKTtcblxuemVyby50b051bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbnplcm8uenpFbmNvZGUgPSB6ZXJvLnp6RGVjb2RlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9O1xuemVyby5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDE7IH07XG5cbi8qKlxuICogWmVybyBoYXNoLlxuICogQG1lbWJlcm9mIHV0aWwuTG9uZ0JpdHNcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbnZhciB6ZXJvSGFzaCA9IExvbmdCaXRzLnplcm9IYXNoID0gXCJcXDBcXDBcXDBcXDBcXDBcXDBcXDBcXDBcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIG51bWJlci5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb21OdW1iZXIgPSBmdW5jdGlvbiBmcm9tTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAwKVxuICAgICAgICByZXR1cm4gemVybztcbiAgICB2YXIgc2lnbiA9IHZhbHVlIDwgMDtcbiAgICBpZiAoc2lnbilcbiAgICAgICAgdmFsdWUgPSAtdmFsdWU7XG4gICAgdmFyIGxvID0gdmFsdWUgPj4+IDAsXG4gICAgICAgIGhpID0gKHZhbHVlIC0gbG8pIC8gNDI5NDk2NzI5NiA+Pj4gMDtcbiAgICBpZiAoc2lnbikge1xuICAgICAgICBoaSA9IH5oaSA+Pj4gMDtcbiAgICAgICAgbG8gPSB+bG8gPj4+IDA7XG4gICAgICAgIGlmICgrK2xvID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgbG8gPSAwO1xuICAgICAgICAgICAgaWYgKCsraGkgPiA0Mjk0OTY3Mjk1KVxuICAgICAgICAgICAgICAgIGhpID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IExvbmdCaXRzKGxvLCBoaSk7XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgbmV3IGxvbmcgYml0cyBmcm9tIGEgbnVtYmVyLCBsb25nIG9yIHN0cmluZy5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZVxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IEluc3RhbmNlXG4gKi9cbkxvbmdCaXRzLmZyb20gPSBmdW5jdGlvbiBmcm9tKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIExvbmdCaXRzLmZyb21OdW1iZXIodmFsdWUpO1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICAgICAgdmFsdWUgPSB1dGlsLkxvbmcuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBMb25nQml0cy5mcm9tTnVtYmVyKHBhcnNlSW50KHZhbHVlLCAxMCkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUubG93IHx8IHZhbHVlLmhpZ2ggPyBuZXcgTG9uZ0JpdHModmFsdWUubG93ID4+PiAwLCB2YWx1ZS5oaWdoID4+PiAwKSA6IHplcm87XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgcG9zc2libHkgdW5zYWZlIEphdmFTY3JpcHQgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbdW5zaWduZWQ9ZmFsc2VdIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBQb3NzaWJseSB1bnNhZmUgbnVtYmVyXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS50b051bWJlciA9IGZ1bmN0aW9uIHRvTnVtYmVyKHVuc2lnbmVkKSB7XG4gICAgaWYgKCF1bnNpZ25lZCAmJiB0aGlzLmhpID4+PiAzMSkge1xuICAgICAgICB2YXIgbG8gPSB+dGhpcy5sbyArIDEgPj4+IDAsXG4gICAgICAgICAgICBoaSA9IH50aGlzLmhpICAgICA+Pj4gMDtcbiAgICAgICAgaWYgKCFsbylcbiAgICAgICAgICAgIGhpID0gaGkgKyAxID4+PiAwO1xuICAgICAgICByZXR1cm4gLShsbyArIGhpICogNDI5NDk2NzI5Nik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvICsgdGhpcy5oaSAqIDQyOTQ5NjcyOTY7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgbG9uZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd9IExvbmdcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvTG9uZyA9IGZ1bmN0aW9uIHRvTG9uZyh1bnNpZ25lZCkge1xuICAgIHJldHVybiB1dGlsLkxvbmdcbiAgICAgICAgPyBuZXcgdXRpbC5Mb25nKHRoaXMubG8gfCAwLCB0aGlzLmhpIHwgMCwgQm9vbGVhbih1bnNpZ25lZCkpXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIDogeyBsb3c6IHRoaXMubG8gfCAwLCBoaWdoOiB0aGlzLmhpIHwgMCwgdW5zaWduZWQ6IEJvb2xlYW4odW5zaWduZWQpIH07XG59O1xuXG52YXIgY2hhckNvZGVBdCA9IFN0cmluZy5wcm90b3R5cGUuY2hhckNvZGVBdDtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIG5ldyBsb25nIGJpdHMgZnJvbSB0aGUgc3BlY2lmaWVkIDggY2hhcmFjdGVycyBsb25nIGhhc2guXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaCBIYXNoXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gQml0c1xuICovXG5Mb25nQml0cy5mcm9tSGFzaCA9IGZ1bmN0aW9uIGZyb21IYXNoKGhhc2gpIHtcbiAgICBpZiAoaGFzaCA9PT0gemVyb0hhc2gpXG4gICAgICAgIHJldHVybiB6ZXJvO1xuICAgIHJldHVybiBuZXcgTG9uZ0JpdHMoXG4gICAgICAgICggY2hhckNvZGVBdC5jYWxsKGhhc2gsIDApXG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDEpIDw8IDhcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMikgPDwgMTZcbiAgICAgICAgfCBjaGFyQ29kZUF0LmNhbGwoaGFzaCwgMykgPDwgMjQpID4+PiAwXG4gICAgLFxuICAgICAgICAoIGNoYXJDb2RlQXQuY2FsbChoYXNoLCA0KVxuICAgICAgICB8IGNoYXJDb2RlQXQuY2FsbChoYXNoLCA1KSA8PCA4XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDYpIDw8IDE2XG4gICAgICAgIHwgY2hhckNvZGVBdC5jYWxsKGhhc2gsIDcpIDw8IDI0KSA+Pj4gMFxuICAgICk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRoaXMgbG9uZyBiaXRzIHRvIGEgOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEhhc2hcbiAqL1xuTG9uZ0JpdHMucHJvdG90eXBlLnRvSGFzaCA9IGZ1bmN0aW9uIHRvSGFzaCgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShcbiAgICAgICAgdGhpcy5sbyAgICAgICAgJiAyNTUsXG4gICAgICAgIHRoaXMubG8gPj4+IDggICYgMjU1LFxuICAgICAgICB0aGlzLmxvID4+PiAxNiAmIDI1NSxcbiAgICAgICAgdGhpcy5sbyA+Pj4gMjQgICAgICAsXG4gICAgICAgIHRoaXMuaGkgICAgICAgICYgMjU1LFxuICAgICAgICB0aGlzLmhpID4+PiA4ICAmIDI1NSxcbiAgICAgICAgdGhpcy5oaSA+Pj4gMTYgJiAyNTUsXG4gICAgICAgIHRoaXMuaGkgPj4+IDI0XG4gICAgKTtcbn07XG5cbi8qKlxuICogWmlnLXphZyBlbmNvZGVzIHRoaXMgbG9uZyBiaXRzLlxuICogQHJldHVybnMge3V0aWwuTG9uZ0JpdHN9IGB0aGlzYFxuICovXG5Mb25nQml0cy5wcm90b3R5cGUuenpFbmNvZGUgPSBmdW5jdGlvbiB6ekVuY29kZSgpIHtcbiAgICB2YXIgbWFzayA9ICAgdGhpcy5oaSA+PiAzMTtcbiAgICB0aGlzLmhpICA9ICgodGhpcy5oaSA8PCAxIHwgdGhpcy5sbyA+Pj4gMzEpIF4gbWFzaykgPj4+IDA7XG4gICAgdGhpcy5sbyAgPSAoIHRoaXMubG8gPDwgMSAgICAgICAgICAgICAgICAgICBeIG1hc2spID4+PiAwO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBaaWctemFnIGRlY29kZXMgdGhpcyBsb25nIGJpdHMuXG4gKiBAcmV0dXJucyB7dXRpbC5Mb25nQml0c30gYHRoaXNgXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS56ekRlY29kZSA9IGZ1bmN0aW9uIHp6RGVjb2RlKCkge1xuICAgIHZhciBtYXNrID0gLSh0aGlzLmxvICYgMSk7XG4gICAgdGhpcy5sbyAgPSAoKHRoaXMubG8gPj4+IDEgfCB0aGlzLmhpIDw8IDMxKSBeIG1hc2spID4+PiAwO1xuICAgIHRoaXMuaGkgID0gKCB0aGlzLmhpID4+PiAxICAgICAgICAgICAgICAgICAgXiBtYXNrKSA+Pj4gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgbG9uZ2JpdHMgd2hlbiBlbmNvZGVkIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge251bWJlcn0gTGVuZ3RoXG4gKi9cbkxvbmdCaXRzLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiBsZW5ndGgoKSB7XG4gICAgdmFyIHBhcnQwID0gIHRoaXMubG8sXG4gICAgICAgIHBhcnQxID0gKHRoaXMubG8gPj4+IDI4IHwgdGhpcy5oaSA8PCA0KSA+Pj4gMCxcbiAgICAgICAgcGFydDIgPSAgdGhpcy5oaSA+Pj4gMjQ7XG4gICAgcmV0dXJuIHBhcnQyID09PSAwXG4gICAgICAgICA/IHBhcnQxID09PSAwXG4gICAgICAgICAgID8gcGFydDAgPCAxNjM4NFxuICAgICAgICAgICAgID8gcGFydDAgPCAxMjggPyAxIDogMlxuICAgICAgICAgICAgIDogcGFydDAgPCAyMDk3MTUyID8gMyA6IDRcbiAgICAgICAgICAgOiBwYXJ0MSA8IDE2Mzg0XG4gICAgICAgICAgICAgPyBwYXJ0MSA8IDEyOCA/IDUgOiA2XG4gICAgICAgICAgICAgOiBwYXJ0MSA8IDIwOTcxNTIgPyA3IDogOFxuICAgICAgICAgOiBwYXJ0MiA8IDEyOCA/IDkgOiAxMDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciB1dGlsID0gZXhwb3J0cztcblxuLy8gdXNlZCB0byByZXR1cm4gYSBQcm9taXNlIHdoZXJlIGNhbGxiYWNrIGlzIG9taXR0ZWRcbnV0aWwuYXNQcm9taXNlID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2FzcHJvbWlzZVwiKTtcblxuLy8gY29udmVydHMgdG8gLyBmcm9tIGJhc2U2NCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwuYmFzZTY0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Jhc2U2NFwiKTtcblxuLy8gYmFzZSBjbGFzcyBvZiBycGMuU2VydmljZVxudXRpbC5FdmVudEVtaXR0ZXIgPSByZXF1aXJlKFwiQHByb3RvYnVmanMvZXZlbnRlbWl0dGVyXCIpO1xuXG4vLyBmbG9hdCBoYW5kbGluZyBhY2Nyb3NzIGJyb3dzZXJzXG51dGlsLmZsb2F0ID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL2Zsb2F0XCIpO1xuXG4vLyByZXF1aXJlcyBtb2R1bGVzIG9wdGlvbmFsbHkgYW5kIGhpZGVzIHRoZSBjYWxsIGZyb20gYnVuZGxlcnNcbnV0aWwuaW5xdWlyZSA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy9pbnF1aXJlXCIpO1xuXG4vLyBjb252ZXJ0cyB0byAvIGZyb20gdXRmOCBlbmNvZGVkIHN0cmluZ3NcbnV0aWwudXRmOCA9IHJlcXVpcmUoXCJAcHJvdG9idWZqcy91dGY4XCIpO1xuXG4vLyBwcm92aWRlcyBhIG5vZGUtbGlrZSBidWZmZXIgcG9vbCBpbiB0aGUgYnJvd3NlclxudXRpbC5wb29sID0gcmVxdWlyZShcIkBwcm90b2J1ZmpzL3Bvb2xcIik7XG5cbi8vIHV0aWxpdHkgdG8gd29yayB3aXRoIHRoZSBsb3cgYW5kIGhpZ2ggYml0cyBvZiBhIDY0IGJpdCB2YWx1ZVxudXRpbC5Mb25nQml0cyA9IHJlcXVpcmUoXCIuL2xvbmdiaXRzXCIpO1xuXG4vKipcbiAqIFdoZXRoZXIgcnVubmluZyB3aXRoaW4gbm9kZSBvciBub3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbnV0aWwuaXNOb2RlID0gQm9vbGVhbih0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsXG4gICAgICAgICAgICAgICAgICAgJiYgZ2xvYmFsLnByb2Nlc3NcbiAgICAgICAgICAgICAgICAgICAmJiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9uc1xuICAgICAgICAgICAgICAgICAgICYmIGdsb2JhbC5wcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG4vKipcbiAqIEdsb2JhbCBvYmplY3QgcmVmZXJlbmNlLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbnV0aWwuZ2xvYmFsID0gdXRpbC5pc05vZGUgJiYgZ2xvYmFsXG4gICAgICAgICAgIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93XG4gICAgICAgICAgIHx8IHR5cGVvZiBzZWxmICAgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZlxuICAgICAgICAgICB8fCB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXG4vKipcbiAqIEFuIGltbXVhYmxlIGVtcHR5IGFycmF5LlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEB0eXBlIHtBcnJheS48Kj59XG4gKiBAY29uc3RcbiAqL1xudXRpbC5lbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZSA/IE9iamVjdC5mcmVlemUoW10pIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gW107IC8vIHVzZWQgb24gcHJvdG90eXBlc1xuXG4vKipcbiAqIEFuIGltbXV0YWJsZSBlbXB0eSBvYmplY3QuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQGNvbnN0XG4gKi9cbnV0aWwuZW1wdHlPYmplY3QgPSBPYmplY3QuZnJlZXplID8gT2JqZWN0LmZyZWV6ZSh7fSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB7fTsgLy8gdXNlZCBvbiBwcm90b3R5cGVzXG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIGFuIGludGVnZXJcbiAqL1xudXRpbC5pc0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgaXNGaW5pdGUodmFsdWUpICYmIE1hdGguZmxvb3IodmFsdWUpID09PSB2YWx1ZTtcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmdcbiAqL1xudXRpbC5pc1N0cmluZyA9IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogVGVzdHMgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBhIG5vbi1udWxsIG9iamVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgdmFsdWUgaXMgYSBub24tbnVsbCBvYmplY3RcbiAqL1xudXRpbC5pc09iamVjdCA9IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIHV0aWwuaXNTZXR9LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFBsYWluIG9iamVjdCBvciBtZXNzYWdlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudCwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAqL1xudXRpbC5pc3NldCA9XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgb24gYSBtZXNzYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgcHJlc2VudC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogUGxhaW4gb2JqZWN0IG9yIG1lc3NhZ2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgY29uc2lkZXJlZCB0byBiZSBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG51dGlsLmlzU2V0ID0gZnVuY3Rpb24gaXNTZXQob2JqLCBwcm9wKSB7XG4gICAgdmFyIHZhbHVlID0gb2JqW3Byb3BdO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXEsIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmxlbmd0aCA6IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpID4gMDtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIFRoaXMgaXMgYSBtaW5pbWFsIHN0YW5kLWFsb25lIGRlZmluaXRpb24gb2YgYSBCdWZmZXIgaW5zdGFuY2UuIFRoZSBhY3R1YWwgdHlwZSBpcyB0aGF0IGV4cG9ydGVkIGJ5IG5vZGUncyB0eXBpbmdzLlxuICogQGludGVyZmFjZSBCdWZmZXJcbiAqIEBleHRlbmRzIFVpbnQ4QXJyYXlcbiAqL1xuXG4vKipcbiAqIE5vZGUncyBCdWZmZXIgY2xhc3MgaWYgYXZhaWxhYmxlLlxuICogQHR5cGUge0NvbnN0cnVjdG9yPEJ1ZmZlcj59XG4gKi9cbnV0aWwuQnVmZmVyID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciBCdWZmZXIgPSB1dGlsLmlucXVpcmUoXCJidWZmZXJcIikuQnVmZmVyO1xuICAgICAgICAvLyByZWZ1c2UgdG8gdXNlIG5vbi1ub2RlIGJ1ZmZlcnMgaWYgbm90IGV4cGxpY2l0bHkgYXNzaWduZWQgKHBlcmYgcmVhc29ucyk6XG4gICAgICAgIHJldHVybiBCdWZmZXIucHJvdG90eXBlLnV0ZjhXcml0ZSA/IEJ1ZmZlciA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59KSgpO1xuXG4vLyBJbnRlcm5hbCBhbGlhcyBvZiBvciBwb2x5ZnVsbCBmb3IgQnVmZmVyLmZyb20uXG51dGlsLl9CdWZmZXJfZnJvbSA9IG51bGw7XG5cbi8vIEludGVybmFsIGFsaWFzIG9mIG9yIHBvbHlmaWxsIGZvciBCdWZmZXIuYWxsb2NVbnNhZmUuXG51dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgYnVmZmVyIG9mIHdoYXRldmVyIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbc2l6ZU9yQXJyYXk9MF0gQnVmZmVyIHNpemUgb3IgbnVtYmVyIGFycmF5XG4gKiBAcmV0dXJucyB7VWludDhBcnJheXxCdWZmZXJ9IEJ1ZmZlclxuICovXG51dGlsLm5ld0J1ZmZlciA9IGZ1bmN0aW9uIG5ld0J1ZmZlcihzaXplT3JBcnJheSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHR5cGVvZiBzaXplT3JBcnJheSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHV0aWwuQnVmZmVyXG4gICAgICAgICAgICA/IHV0aWwuX0J1ZmZlcl9hbGxvY1Vuc2FmZShzaXplT3JBcnJheSlcbiAgICAgICAgICAgIDogbmV3IHV0aWwuQXJyYXkoc2l6ZU9yQXJyYXkpXG4gICAgICAgIDogdXRpbC5CdWZmZXJcbiAgICAgICAgICAgID8gdXRpbC5fQnVmZmVyX2Zyb20oc2l6ZU9yQXJyYXkpXG4gICAgICAgICAgICA6IHR5cGVvZiBVaW50OEFycmF5ID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBzaXplT3JBcnJheVxuICAgICAgICAgICAgICAgIDogbmV3IFVpbnQ4QXJyYXkoc2l6ZU9yQXJyYXkpO1xufTtcblxuLyoqXG4gKiBBcnJheSBpbXBsZW1lbnRhdGlvbiB1c2VkIGluIHRoZSBicm93c2VyLiBgVWludDhBcnJheWAgaWYgc3VwcG9ydGVkLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEB0eXBlIHtDb25zdHJ1Y3RvcjxVaW50OEFycmF5Pn1cbiAqL1xudXRpbC5BcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSBcInVuZGVmaW5lZFwiID8gVWludDhBcnJheSAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyA6IEFycmF5O1xuXG4vKipcbiAqIEFueSBjb21wYXRpYmxlIExvbmcgaW5zdGFuY2UuXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBzdGFuZC1hbG9uZSBkZWZpbml0aW9uIG9mIGEgTG9uZyBpbnN0YW5jZS4gVGhlIGFjdHVhbCB0eXBlIGlzIHRoYXQgZXhwb3J0ZWQgYnkgbG9uZy5qcy5cbiAqIEBpbnRlcmZhY2UgTG9uZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvdyBMb3cgYml0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGhpZ2ggSGlnaCBiaXRzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90XG4gKi9cblxuLyoqXG4gKiBMb25nLmpzJ3MgTG9uZyBjbGFzcyBpZiBhdmFpbGFibGUuXG4gKiBAdHlwZSB7Q29uc3RydWN0b3I8TG9uZz59XG4gKi9cbnV0aWwuTG9uZyA9IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuZ2xvYmFsLmRjb2RlSU8gJiYgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gdXRpbC5nbG9iYWwuZGNvZGVJTy5Mb25nXG4gICAgICAgICB8fCAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyB1dGlsLmdsb2JhbC5Mb25nXG4gICAgICAgICB8fCB1dGlsLmlucXVpcmUoXCJsb25nXCIpO1xuXG4vKipcbiAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHZlcmlmeSAyIGJpdCAoYGJvb2xgKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkyUmUgPSAvXnRydWV8ZmFsc2V8MHwxJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDMyIGJpdCAoYGludDMyYCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXkzMlJlID0gL14tPyg/OjB8WzEtOV1bMC05XSopJC87XG5cbi8qKlxuICogUmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmVyaWZ5IDY0IGJpdCAoYGludDY0YCBldGMuKSBtYXAga2V5cy5cbiAqIEB0eXBlIHtSZWdFeHB9XG4gKiBAY29uc3RcbiAqL1xudXRpbC5rZXk2NFJlID0gL14oPzpbXFxcXHgwMC1cXFxceGZmXXs4fXwtPyg/OjB8WzEtOV1bMC05XSopKSQvO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIG9yIGxvbmcgdG8gYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIYXNoXG4gKi9cbnV0aWwubG9uZ1RvSGFzaCA9IGZ1bmN0aW9uIGxvbmdUb0hhc2godmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyB1dGlsLkxvbmdCaXRzLmZyb20odmFsdWUpLnRvSGFzaCgpXG4gICAgICAgIDogdXRpbC5Mb25nQml0cy56ZXJvSGFzaDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYW4gOCBjaGFyYWN0ZXJzIGxvbmcgaGFzaCBzdHJpbmcgdG8gYSBsb25nIG9yIG51bWJlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoIEhhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Vuc2lnbmVkPWZhbHNlXSBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdFxuICogQHJldHVybnMge0xvbmd8bnVtYmVyfSBPcmlnaW5hbCB2YWx1ZVxuICovXG51dGlsLmxvbmdGcm9tSGFzaCA9IGZ1bmN0aW9uIGxvbmdGcm9tSGFzaChoYXNoLCB1bnNpZ25lZCkge1xuICAgIHZhciBiaXRzID0gdXRpbC5Mb25nQml0cy5mcm9tSGFzaChoYXNoKTtcbiAgICBpZiAodXRpbC5Mb25nKVxuICAgICAgICByZXR1cm4gdXRpbC5Mb25nLmZyb21CaXRzKGJpdHMubG8sIGJpdHMuaGksIHVuc2lnbmVkKTtcbiAgICByZXR1cm4gYml0cy50b051bWJlcihCb29sZWFuKHVuc2lnbmVkKSk7XG59O1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiB0aGUgc291cmNlIG9iamVjdCBpbnRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAbWVtYmVyb2YgdXRpbFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gZHN0IERlc3RpbmF0aW9uIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gc3JjIFNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lmTm90U2V0PWZhbHNlXSBNZXJnZXMgb25seSBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHNldFxuICogQHJldHVybnMge09iamVjdC48c3RyaW5nLCo+fSBEZXN0aW5hdGlvbiBvYmplY3RcbiAqL1xuZnVuY3Rpb24gbWVyZ2UoZHN0LCBzcmMsIGlmTm90U2V0KSB7IC8vIHVzZWQgYnkgY29udmVydGVyc1xuICAgIGZvciAodmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpLCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpXG4gICAgICAgIGlmIChkc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCB8fCAhaWZOb3RTZXQpXG4gICAgICAgICAgICBkc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgcmV0dXJuIGRzdDtcbn1cblxudXRpbC5tZXJnZSA9IG1lcmdlO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgdG8gbG93ZXIgY2FzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgU3RyaW5nIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IENvbnZlcnRlZCBzdHJpbmdcbiAqL1xudXRpbC5sY0ZpcnN0ID0gZnVuY3Rpb24gbGNGaXJzdChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBlcnJvciBjb25zdHJ1Y3Rvci5cbiAqIEBtZW1iZXJvZiB1dGlsXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFcnJvciBuYW1lXG4gKiBAcmV0dXJucyB7Q29uc3RydWN0b3I8RXJyb3I+fSBDdXN0b20gZXJyb3IgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gbmV3RXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgcHJvcGVydGllcykge1xuXG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDdXN0b21FcnJvcikpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEN1c3RvbUVycm9yKG1lc3NhZ2UsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIEVycm9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG4gICAgICAgIC8vIF4ganVzdCByZXR1cm5zIGEgbmV3IGVycm9yIGluc3RhbmNlIGJlY2F1c2UgdGhlIGN0b3IgY2FuIGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uXG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwibWVzc2FnZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtZXNzYWdlOyB9IH0pO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgLy8gbm9kZVxuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3VzdG9tRXJyb3IpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFja1wiLCB7IHZhbHVlOiBuZXcgRXJyb3IoKS5zdGFjayB8fCBcIlwiIH0pO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzKVxuICAgICAgICAgICAgbWVyZ2UodGhpcywgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgKEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBDdXN0b21FcnJvcjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDdXN0b21FcnJvci5wcm90b3R5cGUsIFwibmFtZVwiLCB7IGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBuYW1lOyB9IH0pO1xuXG4gICAgQ3VzdG9tRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLm1lc3NhZ2U7XG4gICAgfTtcblxuICAgIHJldHVybiBDdXN0b21FcnJvcjtcbn1cblxudXRpbC5uZXdFcnJvciA9IG5ld0Vycm9yO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgcHJvdG9jb2wgZXJyb3IuXG4gKiBAY2xhc3NkZXNjIEVycm9yIHN1YmNsYXNzIGluZGljYXRpbmcgYSBwcm90b2NvbCBzcGVjaWZjIGVycm9yLlxuICogQG1lbWJlcm9mIHV0aWxcbiAqIEBleHRlbmRzIEVycm9yXG4gKiBAdGVtcGxhdGUgVCBleHRlbmRzIE1lc3NhZ2U8VD5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgRXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywqPn0gW3Byb3BlcnRpZXNdIEFkZGl0aW9uYWwgcHJvcGVydGllc1xuICogQGV4YW1wbGVcbiAqIHRyeSB7XG4gKiAgICAgTXlNZXNzYWdlLmRlY29kZShzb21lQnVmZmVyKTsgLy8gdGhyb3dzIGlmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZ1xuICogfSBjYXRjaCAoZSkge1xuICogICAgIGlmIChlIGluc3RhbmNlb2YgUHJvdG9jb2xFcnJvciAmJiBlLmluc3RhbmNlKVxuICogICAgICAgICBjb25zb2xlLmxvZyhcImRlY29kZWQgc28gZmFyOiBcIiArIEpTT04uc3RyaW5naWZ5KGUuaW5zdGFuY2UpKTtcbiAqIH1cbiAqL1xudXRpbC5Qcm90b2NvbEVycm9yID0gbmV3RXJyb3IoXCJQcm90b2NvbEVycm9yXCIpO1xuXG4vKipcbiAqIFNvIGZhciBkZWNvZGVkIG1lc3NhZ2UgaW5zdGFuY2UuXG4gKiBAbmFtZSB1dGlsLlByb3RvY29sRXJyb3IjaW5zdGFuY2VcbiAqIEB0eXBlIHtNZXNzYWdlPFQ+fVxuICovXG5cbi8qKlxuICogQSBPbmVPZiBnZXR0ZXIgYXMgcmV0dXJuZWQgYnkge0BsaW5rIHV0aWwub25lT2ZHZXR0ZXJ9LlxuICogQHR5cGVkZWYgT25lT2ZHZXR0ZXJcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBTZXQgZmllbGQgbmFtZSwgaWYgYW55XG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSBnZXR0ZXIgZm9yIGEgb25lb2YncyBwcmVzZW50IGZpZWxkIG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBmaWVsZE5hbWVzIEZpZWxkIG5hbWVzXG4gKiBAcmV0dXJucyB7T25lT2ZHZXR0ZXJ9IFVuYm91bmQgZ2V0dGVyXG4gKi9cbnV0aWwub25lT2ZHZXR0ZXIgPSBmdW5jdGlvbiBnZXRPbmVPZihmaWVsZE5hbWVzKSB7XG4gICAgdmFyIGZpZWxkTWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZE5hbWVzLmxlbmd0aDsgKytpKVxuICAgICAgICBmaWVsZE1hcFtmaWVsZE5hbWVzW2ldXSA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU2V0IGZpZWxkIG5hbWUsIGlmIGFueVxuICAgICAqIEB0aGlzIE9iamVjdFxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgICAgICAgZm9yICh2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpLCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID4gLTE7IC0taSlcbiAgICAgICAgICAgIGlmIChmaWVsZE1hcFtrZXlzW2ldXSA9PT0gMSAmJiB0aGlzW2tleXNbaV1dICE9PSB1bmRlZmluZWQgJiYgdGhpc1trZXlzW2ldXSAhPT0gbnVsbClcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5c1tpXTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBIE9uZU9mIHNldHRlciBhcyByZXR1cm5lZCBieSB7QGxpbmsgdXRpbC5vbmVPZlNldHRlcn0uXG4gKiBAdHlwZWRlZiBPbmVPZlNldHRlclxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZSBGaWVsZCBuYW1lXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbi8qKlxuICogQnVpbGRzIGEgc2V0dGVyIGZvciBhIG9uZW9mJ3MgcHJlc2VudCBmaWVsZCBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gZmllbGROYW1lcyBGaWVsZCBuYW1lc1xuICogQHJldHVybnMge09uZU9mU2V0dGVyfSBVbmJvdW5kIHNldHRlclxuICovXG51dGlsLm9uZU9mU2V0dGVyID0gZnVuY3Rpb24gc2V0T25lT2YoZmllbGROYW1lcykge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgRmllbGQgbmFtZVxuICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAgICogQHRoaXMgT2JqZWN0XG4gICAgICogQGlnbm9yZVxuICAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmllbGROYW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVzW2ldICE9PSBuYW1lKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzW2ZpZWxkTmFtZXNbaV1dO1xuICAgIH07XG59O1xuXG4vKipcbiAqIERlZmF1bHQgY29udmVyc2lvbiBvcHRpb25zIHVzZWQgZm9yIHtAbGluayBNZXNzYWdlI3RvSlNPTn0gaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIFRoZXNlIG9wdGlvbnMgYXJlIGNsb3NlIHRvIHByb3RvMydzIEpTT04gbWFwcGluZyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCBpbnRlcm5hbCB0eXBlcyBsaWtlIEFueSBhcmUgaGFuZGxlZCBqdXN0IGxpa2UgbWVzc2FnZXMuIE1vcmUgcHJlY2lzZWx5OlxuICpcbiAqIC0gTG9uZ3MgYmVjb21lIHN0cmluZ3NcbiAqIC0gRW51bXMgYmVjb21lIHN0cmluZyBrZXlzXG4gKiAtIEJ5dGVzIGJlY29tZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdzXG4gKiAtIChTdWItKU1lc3NhZ2VzIGJlY29tZSBwbGFpbiBvYmplY3RzXG4gKiAtIE1hcHMgYmVjb21lIHBsYWluIG9iamVjdHMgd2l0aCBhbGwgc3RyaW5nIGtleXNcbiAqIC0gUmVwZWF0ZWQgZmllbGRzIGJlY29tZSBhcnJheXNcbiAqIC0gTmFOIGFuZCBJbmZpbml0eSBmb3IgZmxvYXQgYW5kIGRvdWJsZSBmaWVsZHMgYmVjb21lIHN0cmluZ3NcbiAqXG4gKiBAdHlwZSB7SUNvbnZlcnNpb25PcHRpb25zfVxuICogQHNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wcm90b2NvbC1idWZmZXJzL2RvY3MvcHJvdG8zP2hsPWVuI2pzb25cbiAqL1xudXRpbC50b0pTT05PcHRpb25zID0ge1xuICAgIGxvbmdzOiBTdHJpbmcsXG4gICAgZW51bXM6IFN0cmluZyxcbiAgICBieXRlczogU3RyaW5nLFxuICAgIGpzb246IHRydWVcbn07XG5cbi8vIFNldHMgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudCAoY2FsbGVkIGluIGluZGV4LW1pbmltYWwpXG51dGlsLl9jb25maWd1cmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgQnVmZmVyID0gdXRpbC5CdWZmZXI7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFCdWZmZXIpIHtcbiAgICAgICAgdXRpbC5fQnVmZmVyX2Zyb20gPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmUgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGJlY2F1c2Ugbm9kZSA0LnggYnVmZmVycyBhcmUgaW5jb21wYXRpYmxlICYgaW1tdXRhYmxlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGNvZGVJTy9wcm90b2J1Zi5qcy9wdWxsLzY2NVxuICAgIHV0aWwuX0J1ZmZlcl9mcm9tID0gQnVmZmVyLmZyb20gIT09IFVpbnQ4QXJyYXkuZnJvbSAmJiBCdWZmZXIuZnJvbSB8fFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBCdWZmZXJfZnJvbSh2YWx1ZSwgZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQnVmZmVyKHZhbHVlLCBlbmNvZGluZyk7XG4gICAgICAgIH07XG4gICAgdXRpbC5fQnVmZmVyX2FsbG9jVW5zYWZlID0gQnVmZmVyLmFsbG9jVW5zYWZlIHx8XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIEJ1ZmZlcl9hbGxvY1Vuc2FmZShzaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzaXplKTtcbiAgICAgICAgfTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gV3JpdGVyO1xuXG52YXIgdXRpbCAgICAgID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG52YXIgQnVmZmVyV3JpdGVyOyAvLyBjeWNsaWNcblxudmFyIExvbmdCaXRzICA9IHV0aWwuTG9uZ0JpdHMsXG4gICAgYmFzZTY0ICAgID0gdXRpbC5iYXNlNjQsXG4gICAgdXRmOCAgICAgID0gdXRpbC51dGY4O1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHdyaXRlciBvcGVyYXRpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgVWludDhBcnJheSwgbnVtYmVyKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHsqfSB2YWwgVmFsdWUgdG8gd3JpdGVcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gT3AoZm4sIGxlbiwgdmFsKSB7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0byBjYWxsLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbihVaW50OEFycmF5LCBudW1iZXIsICopfVxuICAgICAqL1xuICAgIHRoaXMuZm4gPSBmbjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGJ5dGUgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBsZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IG9wZXJhdGlvbi5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLm5leHQgPSB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSB0byB3cml0ZS5cbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICB0aGlzLnZhbCA9IHZhbDsgLy8gdHlwZSB2YXJpZXNcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIG5vb3AoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgc3RhdGUgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIENvcGllZCB3cml0ZXIgc3RhdGUuXG4gKiBAbWVtYmVyb2YgV3JpdGVyXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7V3JpdGVyfSB3cml0ZXIgV3JpdGVyIHRvIGNvcHkgc3RhdGUgZnJvbVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBTdGF0ZSh3cml0ZXIpIHtcblxuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgaGVhZC5cbiAgICAgKiBAdHlwZSB7V3JpdGVyLk9wfVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IHdyaXRlci5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogQ3VycmVudCB0YWlsLlxuICAgICAqIEB0eXBlIHtXcml0ZXIuT3B9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gd3JpdGVyLnRhaWw7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGJ1ZmZlciBsZW5ndGguXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLmxlbiA9IHdyaXRlci5sZW47XG5cbiAgICAvKipcbiAgICAgKiBOZXh0IHN0YXRlLlxuICAgICAqIEB0eXBlIHtTdGF0ZXxudWxsfVxuICAgICAqL1xuICAgIHRoaXMubmV4dCA9IHdyaXRlci5zdGF0ZXM7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBXcml0ZXIoKSB7XG5cbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGxlbmd0aC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMubGVuID0gMDtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgaGVhZC5cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIHRoaXMuaGVhZCA9IG5ldyBPcChub29wLCAwLCAwKTtcblxuICAgIC8qKlxuICAgICAqIE9wZXJhdGlvbnMgdGFpbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgdGhpcy50YWlsID0gdGhpcy5oZWFkO1xuXG4gICAgLyoqXG4gICAgICogTGlua2VkIGZvcmtlZCBzdGF0ZXMuXG4gICAgICogQHR5cGUge09iamVjdHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMuc3RhdGVzID0gbnVsbDtcblxuICAgIC8vIFdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuLCB0aGUgd3JpdGVyIGNhbGN1bGF0ZXMgaXRzIGJ5dGUgbGVuZ3RoIGFuZCBwdXRzIGl0IGludG8gYSBsaW5rZWRcbiAgICAvLyBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSB3aGVuIGZpbmlzaCgpIGlzIGNhbGxlZC4gVGhpcyBib3RoIGFsbG93cyB1cyB0byBhbGxvY2F0ZVxuICAgIC8vIGJ1ZmZlcnMgb2YgdGhlIGV4YWN0IHJlcXVpcmVkIHNpemUgYW5kIHJlZHVjZXMgdGhlIGFtb3VudCBvZiB3b3JrIHdlIGhhdmUgdG8gZG8gY29tcGFyZWRcbiAgICAvLyB0byBmaXJzdCBjYWxjdWxhdGluZyBvdmVyIG9iamVjdHMgYW5kIHRoZW4gZW5jb2Rpbmcgb3ZlciBvYmplY3RzLiBJbiBvdXIgY2FzZSwgdGhlIGVuY29kaW5nXG4gICAgLy8gcGFydCBpcyBqdXN0IGEgbGlua2VkIGxpc3Qgd2FsayBjYWxsaW5nIG9wZXJhdGlvbnMgd2l0aCBhbHJlYWR5IHByZXBhcmVkIHZhbHVlcy5cbn1cblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKCkge1xuICAgICAgICAgICAgcmV0dXJuIChXcml0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcldyaXRlcigpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGVyKCk7XG4gICAgICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgd3JpdGVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyV3JpdGVyfFdyaXRlcn0gQSB7QGxpbmsgQnVmZmVyV3JpdGVyfSB3aGVuIEJ1ZmZlcnMgYXJlIHN1cHBvcnRlZCwgb3RoZXJ3aXNlIGEge0BsaW5rIFdyaXRlcn1cbiAqL1xuV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG4vKipcbiAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBCdWZmZXIgc2l6ZVxuICogQHJldHVybnMge1VpbnQ4QXJyYXl9IEJ1ZmZlclxuICovXG5Xcml0ZXIuYWxsb2MgPSBmdW5jdGlvbiBhbGxvYyhzaXplKSB7XG4gICAgcmV0dXJuIG5ldyB1dGlsLkFycmF5KHNpemUpO1xufTtcblxuLy8gVXNlIFVpbnQ4QXJyYXkgYnVmZmVyIHBvb2wgaW4gdGhlIGJyb3dzZXIsIGp1c3QgbGlrZSBub2RlIGRvZXMgd2l0aCBidWZmZXJzXG4vKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuaWYgKHV0aWwuQXJyYXkgIT09IEFycmF5KVxuICAgIFdyaXRlci5hbGxvYyA9IHV0aWwucG9vbChXcml0ZXIuYWxsb2MsIHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5KTtcblxuLyoqXG4gKiBQdXNoZXMgYSBuZXcgb3BlcmF0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oVWludDhBcnJheSwgbnVtYmVyLCAqKX0gZm4gRnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAcHJpdmF0ZVxuICovXG5Xcml0ZXIucHJvdG90eXBlLl9wdXNoID0gZnVuY3Rpb24gcHVzaChmbiwgbGVuLCB2YWwpIHtcbiAgICB0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBPcChmbiwgbGVuLCB2YWwpO1xuICAgIHRoaXMubGVuICs9IGxlbjtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIHdyaXRlQnl0ZSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWwgJiAyNTU7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50MzIodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwgPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbCAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsID4+Pj0gNztcbiAgICB9XG4gICAgYnVmW3Bvc10gPSB2YWw7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyB2YXJpbnQgd3JpdGVyIG9wZXJhdGlvbiBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgU2NoZWR1bGVkIHZhcmludCB3cml0ZXIgb3BlcmF0aW9uLlxuICogQGV4dGVuZHMgT3BcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtudW1iZXJ9IGxlbiBWYWx1ZSBieXRlIGxlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbCBWYWx1ZSB0byB3cml0ZVxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBWYXJpbnRPcChsZW4sIHZhbCkge1xuICAgIHRoaXMubGVuID0gbGVuO1xuICAgIHRoaXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnZhbCA9IHZhbDtcbn1cblxuVmFyaW50T3AucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShPcC5wcm90b3R5cGUpO1xuVmFyaW50T3AucHJvdG90eXBlLmZuID0gd3JpdGVWYXJpbnQzMjtcblxuLyoqXG4gKiBXcml0ZXMgYW4gdW5zaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50MzIgPSBmdW5jdGlvbiB3cml0ZV91aW50MzIodmFsdWUpIHtcbiAgICAvLyBoZXJlLCB0aGUgY2FsbCB0byB0aGlzLnB1c2ggaGFzIGJlZW4gaW5saW5lZCBhbmQgYSB2YXJpbnQgc3BlY2lmaWMgT3Agc3ViY2xhc3MgaXMgdXNlZC5cbiAgICAvLyB1aW50MzIgaXMgYnkgZmFyIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBvcGVyYXRpb24gYW5kIGJlbmVmaXRzIHNpZ25pZmljYW50bHkgZnJvbSB0aGlzLlxuICAgIHRoaXMubGVuICs9ICh0aGlzLnRhaWwgPSB0aGlzLnRhaWwubmV4dCA9IG5ldyBWYXJpbnRPcChcbiAgICAgICAgKHZhbHVlID0gdmFsdWUgPj4+IDApXG4gICAgICAgICAgICAgICAgPCAxMjggICAgICAgPyAxXG4gICAgICAgIDogdmFsdWUgPCAxNjM4NCAgICAgPyAyXG4gICAgICAgIDogdmFsdWUgPCAyMDk3MTUyICAgPyAzXG4gICAgICAgIDogdmFsdWUgPCAyNjg0MzU0NTYgPyA0XG4gICAgICAgIDogICAgICAgICAgICAgICAgICAgICA1LFxuICAgIHZhbHVlKSkubGVuO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmludDMyID0gZnVuY3Rpb24gd3JpdGVfaW50MzIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPCAwXG4gICAgICAgID8gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCAxMCwgTG9uZ0JpdHMuZnJvbU51bWJlcih2YWx1ZSkpIC8vIDEwIGJ5dGVzIHBlciBzcGVjXG4gICAgICAgIDogdGhpcy51aW50MzIodmFsdWUpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSAzMiBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ludDMyID0gZnVuY3Rpb24gd3JpdGVfc2ludDMyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCh2YWx1ZSA8PCAxIF4gdmFsdWUgPj4gMzEpID4+PiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlVmFyaW50NjQodmFsLCBidWYsIHBvcykge1xuICAgIHdoaWxlICh2YWwuaGkpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gKHZhbC5sbyA+Pj4gNyB8IHZhbC5oaSA8PCAyNSkgPj4+IDA7XG4gICAgICAgIHZhbC5oaSA+Pj49IDc7XG4gICAgfVxuICAgIHdoaWxlICh2YWwubG8gPiAxMjcpIHtcbiAgICAgICAgYnVmW3BvcysrXSA9IHZhbC5sbyAmIDEyNyB8IDEyODtcbiAgICAgICAgdmFsLmxvID0gdmFsLmxvID4+PiA3O1xuICAgIH1cbiAgICBidWZbcG9zKytdID0gdmFsLmxvO1xufVxuXG4vKipcbiAqIFdyaXRlcyBhbiB1bnNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQuXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS51aW50NjQgPSBmdW5jdGlvbiB3cml0ZV91aW50NjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlVmFyaW50NjQsIGJpdHMubGVuZ3RoKCksIGJpdHMpO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgNjQgYml0IHZhbHVlIGFzIGEgdmFyaW50LlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5pbnQ2NCA9IFdyaXRlci5wcm90b3R5cGUudWludDY0O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUgYXMgYSB2YXJpbnQsIHppZy16YWcgZW5jb2RlZC5cbiAqIEBwYXJhbSB7TG9uZ3xudW1iZXJ8c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IElmIGB2YWx1ZWAgaXMgYSBzdHJpbmcgYW5kIG5vIGxvbmcgbGlicmFyeSBpcyBwcmVzZW50LlxuICovXG5Xcml0ZXIucHJvdG90eXBlLnNpbnQ2NCA9IGZ1bmN0aW9uIHdyaXRlX3NpbnQ2NCh2YWx1ZSkge1xuICAgIHZhciBiaXRzID0gTG9uZ0JpdHMuZnJvbSh2YWx1ZSkuenpFbmNvZGUoKTtcbiAgICByZXR1cm4gdGhpcy5fcHVzaCh3cml0ZVZhcmludDY0LCBiaXRzLmxlbmd0aCgpLCBiaXRzKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgYm9vbGlzaCB2YWx1ZSBhcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiB3cml0ZV9ib29sKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCB2YWx1ZSA/IDEgOiAwKTtcbn07XG5cbmZ1bmN0aW9uIHdyaXRlRml4ZWQzMih2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgYnVmW3BvcyAgICBdID0gIHZhbCAgICAgICAgICYgMjU1O1xuICAgIGJ1Zltwb3MgKyAxXSA9ICB2YWwgPj4+IDggICAmIDI1NTtcbiAgICBidWZbcG9zICsgMl0gPSAgdmFsID4+PiAxNiAgJiAyNTU7XG4gICAgYnVmW3BvcyArIDNdID0gIHZhbCA+Pj4gMjQ7XG59XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZSBhcyBmaXhlZCAzMiBiaXRzLlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gd3JpdGVfZml4ZWQzMih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgdmFsdWUgPj4+IDApO1xufTtcblxuLyoqXG4gKiBXcml0ZXMgYSBzaWduZWQgMzIgYml0IHZhbHVlIGFzIGZpeGVkIDMyIGJpdHMuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc2ZpeGVkMzIgPSBXcml0ZXIucHJvdG90eXBlLmZpeGVkMzI7XG5cbi8qKlxuICogV3JpdGVzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQHBhcmFtIHtMb25nfG51bWJlcnxzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gSWYgYHZhbHVlYCBpcyBhIHN0cmluZyBhbmQgbm8gbG9uZyBsaWJyYXJ5IGlzIHByZXNlbnQuXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZml4ZWQ2NCA9IGZ1bmN0aW9uIHdyaXRlX2ZpeGVkNjQodmFsdWUpIHtcbiAgICB2YXIgYml0cyA9IExvbmdCaXRzLmZyb20odmFsdWUpO1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlRml4ZWQzMiwgNCwgYml0cy5sbykuX3B1c2god3JpdGVGaXhlZDMyLCA0LCBiaXRzLmhpKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgc2lnbmVkIDY0IGJpdCB2YWx1ZSBhcyBmaXhlZCA2NCBiaXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0xvbmd8bnVtYmVyfHN0cmluZ30gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICogQHRocm93cyB7VHlwZUVycm9yfSBJZiBgdmFsdWVgIGlzIGEgc3RyaW5nIGFuZCBubyBsb25nIGxpYnJhcnkgaXMgcHJlc2VudC5cbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5zZml4ZWQ2NCA9IFdyaXRlci5wcm90b3R5cGUuZml4ZWQ2NDtcblxuLyoqXG4gKiBXcml0ZXMgYSBmbG9hdCAoMzIgYml0KS5cbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFZhbHVlIHRvIHdyaXRlXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5mbG9hdCA9IGZ1bmN0aW9uIHdyaXRlX2Zsb2F0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3B1c2godXRpbC5mbG9hdC53cml0ZUZsb2F0TEUsIDQsIHZhbHVlKTtcbn07XG5cbi8qKlxuICogV3JpdGVzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpLlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVmFsdWUgdG8gd3JpdGVcbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmRvdWJsZSA9IGZ1bmN0aW9uIHdyaXRlX2RvdWJsZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9wdXNoKHV0aWwuZmxvYXQud3JpdGVEb3VibGVMRSwgOCwgdmFsdWUpO1xufTtcblxudmFyIHdyaXRlQnl0ZXMgPSB1dGlsLkFycmF5LnByb3RvdHlwZS5zZXRcbiAgICA/IGZ1bmN0aW9uIHdyaXRlQnl0ZXNfc2V0KHZhbCwgYnVmLCBwb3MpIHtcbiAgICAgICAgYnVmLnNldCh2YWwsIHBvcyk7IC8vIGFsc28gd29ya3MgZm9yIHBsYWluIGFycmF5IHZhbHVlc1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIDogZnVuY3Rpb24gd3JpdGVCeXRlc19mb3IodmFsLCBidWYsIHBvcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGJ1Zltwb3MgKyBpXSA9IHZhbFtpXTtcbiAgICB9O1xuXG4vKipcbiAqIFdyaXRlcyBhIHNlcXVlbmNlIG9mIGJ5dGVzLlxuICogQHBhcmFtIHtVaW50OEFycmF5fHN0cmluZ30gdmFsdWUgQnVmZmVyIG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuYnl0ZXMgPSBmdW5jdGlvbiB3cml0ZV9ieXRlcyh2YWx1ZSkge1xuICAgIHZhciBsZW4gPSB2YWx1ZS5sZW5ndGggPj4+IDA7XG4gICAgaWYgKCFsZW4pXG4gICAgICAgIHJldHVybiB0aGlzLl9wdXNoKHdyaXRlQnl0ZSwgMSwgMCk7XG4gICAgaWYgKHV0aWwuaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIHZhciBidWYgPSBXcml0ZXIuYWxsb2MobGVuID0gYmFzZTY0Lmxlbmd0aCh2YWx1ZSkpO1xuICAgICAgICBiYXNlNjQuZGVjb2RlKHZhbHVlLCBidWYsIDApO1xuICAgICAgICB2YWx1ZSA9IGJ1ZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudWludDMyKGxlbikuX3B1c2god3JpdGVCeXRlcywgbGVuLCB2YWx1ZSk7XG59O1xuXG4vKipcbiAqIFdyaXRlcyBhIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSB0byB3cml0ZVxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuc3RyaW5nID0gZnVuY3Rpb24gd3JpdGVfc3RyaW5nKHZhbHVlKSB7XG4gICAgdmFyIGxlbiA9IHV0ZjgubGVuZ3RoKHZhbHVlKTtcbiAgICByZXR1cm4gbGVuXG4gICAgICAgID8gdGhpcy51aW50MzIobGVuKS5fcHVzaCh1dGY4LndyaXRlLCBsZW4sIHZhbHVlKVxuICAgICAgICA6IHRoaXMuX3B1c2god3JpdGVCeXRlLCAxLCAwKTtcbn07XG5cbi8qKlxuICogRm9ya3MgdGhpcyB3cml0ZXIncyBzdGF0ZSBieSBwdXNoaW5nIGl0IHRvIGEgc3RhY2suXG4gKiBDYWxsaW5nIHtAbGluayBXcml0ZXIjcmVzZXR8cmVzZXR9IG9yIHtAbGluayBXcml0ZXIjbGRlbGltfGxkZWxpbX0gcmVzZXRzIHRoZSB3cml0ZXIgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHJldHVybnMge1dyaXRlcn0gYHRoaXNgXG4gKi9cbldyaXRlci5wcm90b3R5cGUuZm9yayA9IGZ1bmN0aW9uIGZvcmsoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBuZXcgU3RhdGUodGhpcyk7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IE9wKG5vb3AsIDAsIDApO1xuICAgIHRoaXMubGVuID0gMDtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogUmVzZXRzIHRoaXMgaW5zdGFuY2UgdG8gdGhlIGxhc3Qgc3RhdGUuXG4gKiBAcmV0dXJucyB7V3JpdGVyfSBgdGhpc2BcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIGlmICh0aGlzLnN0YXRlcykge1xuICAgICAgICB0aGlzLmhlYWQgICA9IHRoaXMuc3RhdGVzLmhlYWQ7XG4gICAgICAgIHRoaXMudGFpbCAgID0gdGhpcy5zdGF0ZXMudGFpbDtcbiAgICAgICAgdGhpcy5sZW4gICAgPSB0aGlzLnN0YXRlcy5sZW47XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMubmV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgT3Aobm9vcCwgMCwgMCk7XG4gICAgICAgIHRoaXMubGVuICA9IDA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXNldHMgdG8gdGhlIGxhc3Qgc3RhdGUgYW5kIGFwcGVuZHMgdGhlIGZvcmsgc3RhdGUncyBjdXJyZW50IHdyaXRlIGxlbmd0aCBhcyBhIHZhcmludCBmb2xsb3dlZCBieSBpdHMgb3BlcmF0aW9ucy5cbiAqIEByZXR1cm5zIHtXcml0ZXJ9IGB0aGlzYFxuICovXG5Xcml0ZXIucHJvdG90eXBlLmxkZWxpbSA9IGZ1bmN0aW9uIGxkZWxpbSgpIHtcbiAgICB2YXIgaGVhZCA9IHRoaXMuaGVhZCxcbiAgICAgICAgdGFpbCA9IHRoaXMudGFpbCxcbiAgICAgICAgbGVuICA9IHRoaXMubGVuO1xuICAgIHRoaXMucmVzZXQoKS51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKSB7XG4gICAgICAgIHRoaXMudGFpbC5uZXh0ID0gaGVhZC5uZXh0OyAvLyBza2lwIG5vb3BcbiAgICAgICAgdGhpcy50YWlsID0gdGFpbDtcbiAgICAgICAgdGhpcy5sZW4gKz0gbGVuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRmluaXNoZXMgdGhlIHdyaXRlIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtVaW50OEFycmF5fSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuV3JpdGVyLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgdmFyIGhlYWQgPSB0aGlzLmhlYWQubmV4dCwgLy8gc2tpcCBub29wXG4gICAgICAgIGJ1ZiAgPSB0aGlzLmNvbnN0cnVjdG9yLmFsbG9jKHRoaXMubGVuKSxcbiAgICAgICAgcG9zICA9IDA7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgaGVhZC5mbihoZWFkLnZhbCwgYnVmLCBwb3MpO1xuICAgICAgICBwb3MgKz0gaGVhZC5sZW47XG4gICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgfVxuICAgIC8vIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG51bGw7XG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24oQnVmZmVyV3JpdGVyXykge1xuICAgIEJ1ZmZlcldyaXRlciA9IEJ1ZmZlcldyaXRlcl87XG4gICAgV3JpdGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuICAgIEJ1ZmZlcldyaXRlci5fY29uZmlndXJlKCk7XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IEJ1ZmZlcldyaXRlcjtcblxuLy8gZXh0ZW5kcyBXcml0ZXJcbnZhciBXcml0ZXIgPSByZXF1aXJlKFwiLi93cml0ZXJcIik7XG4oQnVmZmVyV3JpdGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGVyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yID0gQnVmZmVyV3JpdGVyO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxuLyoqXG4gKiBDb25zdHJ1Y3RzIGEgbmV3IGJ1ZmZlciB3cml0ZXIgaW5zdGFuY2UuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHdyaXRlciB1c2luZyBub2RlIGJ1ZmZlcnMuXG4gKiBAZXh0ZW5kcyBXcml0ZXJcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBCdWZmZXJXcml0ZXIoKSB7XG4gICAgV3JpdGVyLmNhbGwodGhpcyk7XG59XG5cbkJ1ZmZlcldyaXRlci5fY29uZmlndXJlID0gZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEFsbG9jYXRlcyBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQnVmZmVyIHNpemVcbiAgICAgKiBAcmV0dXJucyB7QnVmZmVyfSBCdWZmZXJcbiAgICAgKi9cbiAgICBCdWZmZXJXcml0ZXIuYWxsb2MgPSB1dGlsLl9CdWZmZXJfYWxsb2NVbnNhZmU7XG5cbiAgICBCdWZmZXJXcml0ZXIud3JpdGVCeXRlc0J1ZmZlciA9IHV0aWwuQnVmZmVyICYmIHV0aWwuQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgdXRpbC5CdWZmZXIucHJvdG90eXBlLnNldC5uYW1lID09PSBcInNldFwiXG4gICAgICAgID8gZnVuY3Rpb24gd3JpdGVCeXRlc0J1ZmZlcl9zZXQodmFsLCBidWYsIHBvcykge1xuICAgICAgICAgIGJ1Zi5zZXQodmFsLCBwb3MpOyAvLyBmYXN0ZXIgdGhhbiBjb3B5IChyZXF1aXJlcyBub2RlID49IDQgd2hlcmUgQnVmZmVycyBleHRlbmQgVWludDhBcnJheSBhbmQgc2V0IGlzIHByb3Blcmx5IGluaGVyaXRlZClcbiAgICAgICAgICAvLyBhbHNvIHdvcmtzIGZvciBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGZ1bmN0aW9uIHdyaXRlQnl0ZXNCdWZmZXJfY29weSh2YWwsIGJ1ZiwgcG9zKSB7XG4gICAgICAgICAgaWYgKHZhbC5jb3B5KSAvLyBCdWZmZXIgdmFsdWVzXG4gICAgICAgICAgICB2YWwuY29weShidWYsIHBvcywgMCwgdmFsLmxlbmd0aCk7XG4gICAgICAgICAgZWxzZSBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7KSAvLyBwbGFpbiBhcnJheSB2YWx1ZXNcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSB2YWxbaSsrXTtcbiAgICAgICAgfTtcbn07XG5cblxuLyoqXG4gKiBAb3ZlcnJpZGVcbiAqL1xuQnVmZmVyV3JpdGVyLnByb3RvdHlwZS5ieXRlcyA9IGZ1bmN0aW9uIHdyaXRlX2J5dGVzX2J1ZmZlcih2YWx1ZSkge1xuICAgIGlmICh1dGlsLmlzU3RyaW5nKHZhbHVlKSlcbiAgICAgICAgdmFsdWUgPSB1dGlsLl9CdWZmZXJfZnJvbSh2YWx1ZSwgXCJiYXNlNjRcIik7XG4gICAgdmFyIGxlbiA9IHZhbHVlLmxlbmd0aCA+Pj4gMDtcbiAgICB0aGlzLnVpbnQzMihsZW4pO1xuICAgIGlmIChsZW4pXG4gICAgICAgIHRoaXMuX3B1c2goQnVmZmVyV3JpdGVyLndyaXRlQnl0ZXNCdWZmZXIsIGxlbiwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gd3JpdGVTdHJpbmdCdWZmZXIodmFsLCBidWYsIHBvcykge1xuICAgIGlmICh2YWwubGVuZ3RoIDwgNDApIC8vIHBsYWluIGpzIGlzIGZhc3RlciBmb3Igc2hvcnQgc3RyaW5ncyAocHJvYmFibHkgZHVlIHRvIHJlZHVuZGFudCBhc3NlcnRpb25zKVxuICAgICAgICB1dGlsLnV0Zjgud3JpdGUodmFsLCBidWYsIHBvcyk7XG4gICAgZWxzZSBpZiAoYnVmLnV0ZjhXcml0ZSlcbiAgICAgICAgYnVmLnV0ZjhXcml0ZSh2YWwsIHBvcyk7XG4gICAgZWxzZVxuICAgICAgICBidWYud3JpdGUodmFsLCBwb3MpO1xufVxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJXcml0ZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHdyaXRlX3N0cmluZ19idWZmZXIodmFsdWUpIHtcbiAgICB2YXIgbGVuID0gdXRpbC5CdWZmZXIuYnl0ZUxlbmd0aCh2YWx1ZSk7XG4gICAgdGhpcy51aW50MzIobGVuKTtcbiAgICBpZiAobGVuKVxuICAgICAgICB0aGlzLl9wdXNoKHdyaXRlU3RyaW5nQnVmZmVyLCBsZW4sIHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbn07XG5cblxuLyoqXG4gKiBGaW5pc2hlcyB0aGUgd3JpdGUgb3BlcmF0aW9uLlxuICogQG5hbWUgQnVmZmVyV3JpdGVyI2ZpbmlzaFxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7QnVmZmVyfSBGaW5pc2hlZCBidWZmZXJcbiAqL1xuXG5CdWZmZXJXcml0ZXIuX2NvbmZpZ3VyZSgpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IFJlYWRlcjtcblxudmFyIHV0aWwgICAgICA9IHJlcXVpcmUoXCIuL3V0aWwvbWluaW1hbFwiKTtcblxudmFyIEJ1ZmZlclJlYWRlcjsgLy8gY3ljbGljXG5cbnZhciBMb25nQml0cyAgPSB1dGlsLkxvbmdCaXRzLFxuICAgIHV0ZjggICAgICA9IHV0aWwudXRmODtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGluZGV4T3V0T2ZSYW5nZShyZWFkZXIsIHdyaXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIFJhbmdlRXJyb3IoXCJpbmRleCBvdXQgb2YgcmFuZ2U6IFwiICsgcmVhZGVyLnBvcyArIFwiICsgXCIgKyAod3JpdGVMZW5ndGggfHwgMSkgKyBcIiA+IFwiICsgcmVhZGVyLmxlbik7XG59XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyByZWFkZXIgaW5zdGFuY2UgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAY2xhc3NkZXNjIFdpcmUgZm9ybWF0IHJlYWRlciB1c2luZyBgVWludDhBcnJheWAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgYEFycmF5YC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtVaW50OEFycmF5fSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgZnJvbVxuICovXG5mdW5jdGlvbiBSZWFkZXIoYnVmZmVyKSB7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAdHlwZSB7VWludDhBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLmJ1ZiA9IGJ1ZmZlcjtcblxuICAgIC8qKlxuICAgICAqIFJlYWQgYnVmZmVyIHBvc2l0aW9uLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5wb3MgPSAwO1xuXG4gICAgLyoqXG4gICAgICogUmVhZCBidWZmZXIgbGVuZ3RoLlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgdGhpcy5sZW4gPSBidWZmZXIubGVuZ3RoO1xufVxuXG52YXIgY3JlYXRlX2FycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09IFwidW5kZWZpbmVkXCJcbiAgICA/IGZ1bmN0aW9uIGNyZWF0ZV90eXBlZF9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQXJyYXkuaXNBcnJheShidWZmZXIpKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkZXIoYnVmZmVyKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGJ1ZmZlclwiKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICA6IGZ1bmN0aW9uIGNyZWF0ZV9hcnJheShidWZmZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnVmZmVyKSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGVyKGJ1ZmZlcik7XG4gICAgICAgIHRocm93IEVycm9yKFwiaWxsZWdhbCBidWZmZXJcIik7XG4gICAgfTtcblxudmFyIGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gdXRpbC5CdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiBjcmVhdGVfYnVmZmVyX3NldHVwKGJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFkZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlX2J1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5CdWZmZXIuaXNCdWZmZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICA/IG5ldyBCdWZmZXJSZWFkZXIoYnVmZmVyKVxuICAgICAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZV9hcnJheShidWZmZXIpO1xuICAgICAgICAgICAgfSkoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICA6IGNyZWF0ZV9hcnJheTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyByZWFkZXIgdXNpbmcgdGhlIHNwZWNpZmllZCBidWZmZXIuXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7VWludDhBcnJheXxCdWZmZXJ9IGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tXG4gKiBAcmV0dXJucyB7UmVhZGVyfEJ1ZmZlclJlYWRlcn0gQSB7QGxpbmsgQnVmZmVyUmVhZGVyfSBpZiBgYnVmZmVyYCBpcyBhIEJ1ZmZlciwgb3RoZXJ3aXNlIGEge0BsaW5rIFJlYWRlcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiBgYnVmZmVyYCBpcyBub3QgYSB2YWxpZCBidWZmZXJcbiAqL1xuUmVhZGVyLmNyZWF0ZSA9IGNyZWF0ZSgpO1xuXG5SZWFkZXIucHJvdG90eXBlLl9zbGljZSA9IHV0aWwuQXJyYXkucHJvdG90eXBlLnN1YmFycmF5IHx8IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIHV0aWwuQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnVpbnQzMiA9IChmdW5jdGlvbiByZWFkX3VpbnQzMl9zZXR1cCgpIHtcbiAgICB2YXIgdmFsdWUgPSA0Mjk0OTY3Mjk1OyAvLyBvcHRpbWl6ZXIgdHlwZS1oaW50LCB0ZW5kcyB0byBkZW9wdCBvdGhlcndpc2UgKD8hKVxuICAgIHJldHVybiBmdW5jdGlvbiByZWFkX3VpbnQzMigpIHtcbiAgICAgICAgdmFsdWUgPSAoICAgICAgICAgdGhpcy5idWZbdGhpcy5wb3NdICYgMTI3ICAgICAgICkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8ICA3KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHZhbHVlID0gKHZhbHVlIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMTQpID4+PiAwOyBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSAodmFsdWUgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCAyMSkgPj4+IDA7IGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9ICh2YWx1ZSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAgMTUpIDw8IDI4KSA+Pj4gMDsgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KSByZXR1cm4gdmFsdWU7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodGhpcy5wb3MgKz0gNSkgPiB0aGlzLmxlbikge1xuICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLmxlbjtcbiAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG59KSgpO1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGEgc2lnbmVkIDMyIGJpdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5pbnQzMiA9IGZ1bmN0aW9uIHJlYWRfaW50MzIoKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgfCAwO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHppZy16YWcgZW5jb2RlZCB2YXJpbnQgYXMgYSBzaWduZWQgMzIgYml0IHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNpbnQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ludDMyKCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudWludDMyKCk7XG4gICAgcmV0dXJuIHZhbHVlID4+PiAxIF4gLSh2YWx1ZSAmIDEpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkTG9uZ1ZhcmludCgpIHtcbiAgICAvLyB0ZW5kcyB0byBkZW9wdCB3aXRoIGxvY2FsIHZhcnMgZm9yIG9jdGV0IGV0Yy5cbiAgICB2YXIgYml0cyA9IG5ldyBMb25nQml0cygwLCAwKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKHRoaXMubGVuIC0gdGhpcy5wb3MgPiA0KSB7IC8vIGZhc3Qgcm91dGUgKGxvKVxuICAgICAgICBmb3IgKDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgLy8gMXN0Li40dGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA1dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zXSAmIDEyNykgPDwgMjgpID4+PiAwO1xuICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA+PiAgNCkgPj4+IDA7XG4gICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDM7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gMXN0Li4zdGhcbiAgICAgICAgICAgIGJpdHMubG8gPSAoYml0cy5sbyB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3KSA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA8IDEyOClcbiAgICAgICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICAvLyA0dGhcbiAgICAgICAgYml0cy5sbyA9IChiaXRzLmxvIHwgKHRoaXMuYnVmW3RoaXMucG9zKytdICYgMTI3KSA8PCBpICogNykgPj4+IDA7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5sZW4gLSB0aGlzLnBvcyA+IDQpIHsgLy8gZmFzdCByb3V0ZSAoaGkpXG4gICAgICAgIGZvciAoOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAvLyA2dGguLjEwdGhcbiAgICAgICAgICAgIGJpdHMuaGkgPSAoYml0cy5oaSB8ICh0aGlzLmJ1Zlt0aGlzLnBvc10gJiAxMjcpIDw8IGkgKiA3ICsgMykgPj4+IDA7XG4gICAgICAgICAgICBpZiAodGhpcy5idWZbdGhpcy5wb3MrK10gPCAxMjgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKDsgaSA8IDU7ICsraSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5sZW4pXG4gICAgICAgICAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMpO1xuICAgICAgICAgICAgLy8gNnRoLi4xMHRoXG4gICAgICAgICAgICBiaXRzLmhpID0gKGJpdHMuaGkgfCAodGhpcy5idWZbdGhpcy5wb3NdICYgMTI3KSA8PCBpICogNyArIDMpID4+PiAwO1xuICAgICAgICAgICAgaWYgKHRoaXMuYnVmW3RoaXMucG9zKytdIDwgMTI4KVxuICAgICAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhyb3cgRXJyb3IoXCJpbnZhbGlkIHZhcmludCBlbmNvZGluZ1wiKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjaW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgdmFyaW50IGFzIGFuIHVuc2lnbmVkIDY0IGJpdCB2YWx1ZS5cbiAqIEBuYW1lIFJlYWRlciN1aW50NjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIGEgemlnLXphZyBlbmNvZGVkIHZhcmludCBhcyBhIHNpZ25lZCA2NCBiaXQgdmFsdWUuXG4gKiBAbmFtZSBSZWFkZXIjc2ludDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIHZhcmludCBhcyBhIGJvb2xlYW4uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJvb2wgPSBmdW5jdGlvbiByZWFkX2Jvb2woKSB7XG4gICAgcmV0dXJuIHRoaXMudWludDMyKCkgIT09IDA7XG59O1xuXG5mdW5jdGlvbiByZWFkRml4ZWQzMl9lbmQoYnVmLCBlbmQpIHsgLy8gbm90ZSB0aGF0IHRoaXMgdXNlcyBgZW5kYCwgbm90IGBwb3NgXG4gICAgcmV0dXJuIChidWZbZW5kIC0gNF1cbiAgICAgICAgICB8IGJ1ZltlbmQgLSAzXSA8PCA4XG4gICAgICAgICAgfCBidWZbZW5kIC0gMl0gPDwgMTZcbiAgICAgICAgICB8IGJ1ZltlbmQgLSAxXSA8PCAyNCkgPj4+IDA7XG59XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhbiB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5maXhlZDMyID0gZnVuY3Rpb24gcmVhZF9maXhlZDMyKCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICByZXR1cm4gcmVhZEZpeGVkMzJfZW5kKHRoaXMuYnVmLCB0aGlzLnBvcyArPSA0KTtcbn07XG5cbi8qKlxuICogUmVhZHMgZml4ZWQgMzIgYml0cyBhcyBhIHNpZ25lZCAzMiBiaXQgaW50ZWdlci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFZhbHVlIHJlYWRcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5zZml4ZWQzMiA9IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkMzIoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA0ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHJldHVybiByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpIHwgMDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWludmFsaWQtdGhpcyAqL1xuXG5mdW5jdGlvbiByZWFkRml4ZWQ2NCgvKiB0aGlzOiBSZWFkZXIgKi8pIHtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0aGlzLnBvcyArIDggPiB0aGlzLmxlbilcbiAgICAgICAgdGhyb3cgaW5kZXhPdXRPZlJhbmdlKHRoaXMsIDgpO1xuXG4gICAgcmV0dXJuIG5ldyBMb25nQml0cyhyZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpLCByZWFkRml4ZWQzMl9lbmQodGhpcy5idWYsIHRoaXMucG9zICs9IDQpKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1pbnZhbGlkLXRoaXMgKi9cblxuLyoqXG4gKiBSZWFkcyBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI2ZpeGVkNjRcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0xvbmd9IFZhbHVlIHJlYWRcbiAqL1xuXG4vKipcbiAqIFJlYWRzIHppZy16YWcgZW5jb2RlZCBmaXhlZCA2NCBiaXRzLlxuICogQG5hbWUgUmVhZGVyI3NmaXhlZDY0XG4gKiBAZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtMb25nfSBWYWx1ZSByZWFkXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBhIGZsb2F0ICgzMiBiaXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZmxvYXQgPSBmdW5jdGlvbiByZWFkX2Zsb2F0KCkge1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHRoaXMucG9zICsgNCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgNCk7XG5cbiAgICB2YXIgdmFsdWUgPSB1dGlsLmZsb2F0LnJlYWRGbG9hdExFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gNDtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgZG91YmxlICg2NCBiaXQgZmxvYXQpIGFzIGEgbnVtYmVyLlxuICogQGZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBWYWx1ZSByZWFkXG4gKi9cblJlYWRlci5wcm90b3R5cGUuZG91YmxlID0gZnVuY3Rpb24gcmVhZF9kb3VibGUoKSB7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodGhpcy5wb3MgKyA4ID4gdGhpcy5sZW4pXG4gICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzLCA0KTtcblxuICAgIHZhciB2YWx1ZSA9IHV0aWwuZmxvYXQucmVhZERvdWJsZUxFKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgdGhpcy5wb3MgKz0gODtcbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX0gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLmJ5dGVzID0gZnVuY3Rpb24gcmVhZF9ieXRlcygpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy51aW50MzIoKSxcbiAgICAgICAgc3RhcnQgID0gdGhpcy5wb3MsXG4gICAgICAgIGVuZCAgICA9IHRoaXMucG9zICsgbGVuZ3RoO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVuZCA+IHRoaXMubGVuKVxuICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcblxuICAgIHRoaXMucG9zICs9IGxlbmd0aDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmJ1ZikpIC8vIHBsYWluIGFycmF5XG4gICAgICAgIHJldHVybiB0aGlzLmJ1Zi5zbGljZShzdGFydCwgZW5kKTtcbiAgICByZXR1cm4gc3RhcnQgPT09IGVuZCAvLyBmaXggZm9yIElFIDEwL1dpbjggYW5kIG90aGVycycgc3ViYXJyYXkgcmV0dXJuaW5nIGFycmF5IG9mIHNpemUgMVxuICAgICAgICA/IG5ldyB0aGlzLmJ1Zi5jb25zdHJ1Y3RvcigwKVxuICAgICAgICA6IHRoaXMuX3NsaWNlLmNhbGwodGhpcy5idWYsIHN0YXJ0LCBlbmQpO1xufTtcblxuLyoqXG4gKiBSZWFkcyBhIHN0cmluZyBwcmVjZWVkZWQgYnkgaXRzIGJ5dGUgbGVuZ3RoIGFzIGEgdmFyaW50LlxuICogQHJldHVybnMge3N0cmluZ30gVmFsdWUgcmVhZFxuICovXG5SZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nKCkge1xuICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXMoKTtcbiAgICByZXR1cm4gdXRmOC5yZWFkKGJ5dGVzLCAwLCBieXRlcy5sZW5ndGgpO1xufTtcblxuLyoqXG4gKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcyBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBza2lwcyBhIHZhcmludC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggaWYga25vd24sIG90aGVyd2lzZSBhIHZhcmludCBpcyBhc3N1bWVkXG4gKiBAcmV0dXJucyB7UmVhZGVyfSBgdGhpc2BcbiAqL1xuUmVhZGVyLnByb3RvdHlwZS5za2lwID0gZnVuY3Rpb24gc2tpcChsZW5ndGgpIHtcbiAgICBpZiAodHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMucG9zICsgbGVuZ3RoID4gdGhpcy5sZW4pXG4gICAgICAgICAgICB0aHJvdyBpbmRleE91dE9mUmFuZ2UodGhpcywgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMubGVuKVxuICAgICAgICAgICAgICAgIHRocm93IGluZGV4T3V0T2ZSYW5nZSh0aGlzKTtcbiAgICAgICAgfSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gJiAxMjgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2tpcHMgdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHdpcmUgdHlwZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3aXJlVHlwZSBXaXJlIHR5cGUgcmVjZWl2ZWRcbiAqIEByZXR1cm5zIHtSZWFkZXJ9IGB0aGlzYFxuICovXG5SZWFkZXIucHJvdG90eXBlLnNraXBUeXBlID0gZnVuY3Rpb24od2lyZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHdpcmVUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIHRoaXMuc2tpcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg4KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnNraXAodGhpcy51aW50MzIoKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgd2hpbGUgKCh3aXJlVHlwZSA9IHRoaXMudWludDMyKCkgJiA3KSAhPT0gNCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcFR5cGUod2lyZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuc2tpcCg0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImludmFsaWQgd2lyZSB0eXBlIFwiICsgd2lyZVR5cGUgKyBcIiBhdCBvZmZzZXQgXCIgKyB0aGlzLnBvcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcblxuUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbihCdWZmZXJSZWFkZXJfKSB7XG4gICAgQnVmZmVyUmVhZGVyID0gQnVmZmVyUmVhZGVyXztcbiAgICBSZWFkZXIuY3JlYXRlID0gY3JlYXRlKCk7XG4gICAgQnVmZmVyUmVhZGVyLl9jb25maWd1cmUoKTtcblxuICAgIHZhciBmbiA9IHV0aWwuTG9uZyA/IFwidG9Mb25nXCIgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBcInRvTnVtYmVyXCI7XG4gICAgdXRpbC5tZXJnZShSZWFkZXIucHJvdG90eXBlLCB7XG5cbiAgICAgICAgaW50NjQ6IGZ1bmN0aW9uIHJlYWRfaW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVpbnQ2NDogZnVuY3Rpb24gcmVhZF91aW50NjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZExvbmdWYXJpbnQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ludDY0OiBmdW5jdGlvbiByZWFkX3NpbnQ2NCgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkTG9uZ1ZhcmludC5jYWxsKHRoaXMpLnp6RGVjb2RlKClbZm5dKGZhbHNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBmaXhlZDY0OiBmdW5jdGlvbiByZWFkX2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0odHJ1ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2ZpeGVkNjQ6IGZ1bmN0aW9uIHJlYWRfc2ZpeGVkNjQoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEZpeGVkNjQuY2FsbCh0aGlzKVtmbl0oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9KTtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gQnVmZmVyUmVhZGVyO1xuXG4vLyBleHRlbmRzIFJlYWRlclxudmFyIFJlYWRlciA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKTtcbihCdWZmZXJSZWFkZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWFkZXIucHJvdG90eXBlKSkuY29uc3RydWN0b3IgPSBCdWZmZXJSZWFkZXI7XG5cbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBuZXcgYnVmZmVyIHJlYWRlciBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgV2lyZSBmb3JtYXQgcmVhZGVyIHVzaW5nIG5vZGUgYnVmZmVycy5cbiAqIEBleHRlbmRzIFJlYWRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyIEJ1ZmZlciB0byByZWFkIGZyb21cbiAqL1xuZnVuY3Rpb24gQnVmZmVyUmVhZGVyKGJ1ZmZlcikge1xuICAgIFJlYWRlci5jYWxsKHRoaXMsIGJ1ZmZlcik7XG5cbiAgICAvKipcbiAgICAgKiBSZWFkIGJ1ZmZlci5cbiAgICAgKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnVmXG4gICAgICogQHR5cGUge0J1ZmZlcn1cbiAgICAgKi9cbn1cblxuQnVmZmVyUmVhZGVyLl9jb25maWd1cmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodXRpbC5CdWZmZXIpXG4gICAgICAgIEJ1ZmZlclJlYWRlci5wcm90b3R5cGUuX3NsaWNlID0gdXRpbC5CdWZmZXIucHJvdG90eXBlLnNsaWNlO1xufTtcblxuXG4vKipcbiAqIEBvdmVycmlkZVxuICovXG5CdWZmZXJSZWFkZXIucHJvdG90eXBlLnN0cmluZyA9IGZ1bmN0aW9uIHJlYWRfc3RyaW5nX2J1ZmZlcigpIHtcbiAgICB2YXIgbGVuID0gdGhpcy51aW50MzIoKTsgLy8gbW9kaWZpZXMgcG9zXG4gICAgcmV0dXJuIHRoaXMuYnVmLnV0ZjhTbGljZVxuICAgICAgICA/IHRoaXMuYnVmLnV0ZjhTbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgPSBNYXRoLm1pbih0aGlzLnBvcyArIGxlbiwgdGhpcy5sZW4pKVxuICAgICAgICA6IHRoaXMuYnVmLnRvU3RyaW5nKFwidXRmLThcIiwgdGhpcy5wb3MsIHRoaXMucG9zID0gTWF0aC5taW4odGhpcy5wb3MgKyBsZW4sIHRoaXMubGVuKSk7XG59O1xuXG4vKipcbiAqIFJlYWRzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcHJlY2VlZGVkIGJ5IGl0cyBsZW5ndGggYXMgYSB2YXJpbnQuXG4gKiBAbmFtZSBCdWZmZXJSZWFkZXIjYnl0ZXNcbiAqIEBmdW5jdGlvblxuICogQHJldHVybnMge0J1ZmZlcn0gVmFsdWUgcmVhZFxuICovXG5cbkJ1ZmZlclJlYWRlci5fY29uZmlndXJlKCk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gU2VydmljZTtcblxudmFyIHV0aWwgPSByZXF1aXJlKFwiLi4vdXRpbC9taW5pbWFsXCIpO1xuXG4vLyBFeHRlbmRzIEV2ZW50RW1pdHRlclxuKFNlcnZpY2UucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh1dGlsLkV2ZW50RW1pdHRlci5wcm90b3R5cGUpKS5jb25zdHJ1Y3RvciA9IFNlcnZpY2U7XG5cbi8qKlxuICogQSBzZXJ2aWNlIG1ldGhvZCBjYWxsYmFjayBhcyB1c2VkIGJ5IHtAbGluayBycGMuU2VydmljZU1ldGhvZHxTZXJ2aWNlTWV0aG9kfS5cbiAqXG4gKiBEaWZmZXJzIGZyb20ge0BsaW5rIFJQQ0ltcGxDYWxsYmFja30gaW4gdGhhdCBpdCBpcyBhbiBhY3R1YWwgY2FsbGJhY2sgb2YgYSBzZXJ2aWNlIG1ldGhvZCB3aGljaCBtYXkgbm90IHJldHVybiBgcmVzcG9uc2UgPSBudWxsYC5cbiAqIEB0eXBlZGVmIHJwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2tcbiAqIEB0ZW1wbGF0ZSBUUmVzIGV4dGVuZHMgTWVzc2FnZTxUUmVzPlxuICogQHR5cGUge2Z1bmN0aW9ufVxuICogQHBhcmFtIHtFcnJvcnxudWxsfSBlcnJvciBFcnJvciwgaWYgYW55XG4gKiBAcGFyYW0ge1RSZXN9IFtyZXNwb25zZV0gUmVzcG9uc2UgbWVzc2FnZVxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqL1xuXG4vKipcbiAqIEEgc2VydmljZSBtZXRob2QgcGFydCBvZiBhIHtAbGluayBycGMuU2VydmljZX0gYXMgY3JlYXRlZCBieSB7QGxpbmsgU2VydmljZS5jcmVhdGV9LlxuICogQHR5cGVkZWYgcnBjLlNlcnZpY2VNZXRob2RcbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKiBAdHlwZSB7ZnVuY3Rpb259XG4gKiBAcGFyYW0ge1RSZXF8UHJvcGVydGllczxUUmVxPn0gcmVxdWVzdCBSZXF1ZXN0IG1lc3NhZ2Ugb3IgcGxhaW4gb2JqZWN0XG4gKiBAcGFyYW0ge3JwYy5TZXJ2aWNlTWV0aG9kQ2FsbGJhY2s8VFJlcz59IFtjYWxsYmFja10gTm9kZS1zdHlsZSBjYWxsYmFjayBjYWxsZWQgd2l0aCB0aGUgZXJyb3IsIGlmIGFueSwgYW5kIHRoZSByZXNwb25zZSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPFRSZXM+Pn0gUHJvbWlzZSBpZiBgY2FsbGJhY2tgIGhhcyBiZWVuIG9taXR0ZWQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYFxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhIG5ldyBSUEMgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBjbGFzc2Rlc2MgQW4gUlBDIHNlcnZpY2UgYXMgcmV0dXJuZWQgYnkge0BsaW5rIFNlcnZpY2UjY3JlYXRlfS5cbiAqIEBleHBvcnRzIHJwYy5TZXJ2aWNlXG4gKiBAZXh0ZW5kcyB1dGlsLkV2ZW50RW1pdHRlclxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge1JQQ0ltcGx9IHJwY0ltcGwgUlBDIGltcGxlbWVudGF0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXF1ZXN0RGVsaW1pdGVkPWZhbHNlXSBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXNwb25zZURlbGltaXRlZD1mYWxzZV0gV2hldGhlciByZXNwb25zZXMgYXJlIGxlbmd0aC1kZWxpbWl0ZWRcbiAqL1xuZnVuY3Rpb24gU2VydmljZShycGNJbXBsLCByZXF1ZXN0RGVsaW1pdGVkLCByZXNwb25zZURlbGltaXRlZCkge1xuXG4gICAgaWYgKHR5cGVvZiBycGNJbXBsICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcInJwY0ltcGwgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuXG4gICAgdXRpbC5FdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIFJQQyBpbXBsZW1lbnRhdGlvbi4gQmVjb21lcyBgbnVsbGAgb25jZSB0aGUgc2VydmljZSBpcyBlbmRlZC5cbiAgICAgKiBAdHlwZSB7UlBDSW1wbHxudWxsfVxuICAgICAqL1xuICAgIHRoaXMucnBjSW1wbCA9IHJwY0ltcGw7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlcXVlc3RzIGFyZSBsZW5ndGgtZGVsaW1pdGVkLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMucmVxdWVzdERlbGltaXRlZCA9IEJvb2xlYW4ocmVxdWVzdERlbGltaXRlZCk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJlc3BvbnNlcyBhcmUgbGVuZ3RoLWRlbGltaXRlZC5cbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLnJlc3BvbnNlRGVsaW1pdGVkID0gQm9vbGVhbihyZXNwb25zZURlbGltaXRlZCk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBzZXJ2aWNlIG1ldGhvZCB0aHJvdWdoIHtAbGluayBycGMuU2VydmljZSNycGNJbXBsfHJwY0ltcGx9LlxuICogQHBhcmFtIHtNZXRob2R8cnBjLlNlcnZpY2VNZXRob2Q8VFJlcSxUUmVzPn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXE+fSByZXF1ZXN0Q3RvciBSZXF1ZXN0IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFRSZXM+fSByZXNwb25zZUN0b3IgUmVzcG9uc2UgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7VFJlcXxQcm9wZXJ0aWVzPFRSZXE+fSByZXF1ZXN0IFJlcXVlc3QgbWVzc2FnZSBvciBwbGFpbiBvYmplY3RcbiAqIEBwYXJhbSB7cnBjLlNlcnZpY2VNZXRob2RDYWxsYmFjazxUUmVzPn0gY2FsbGJhY2sgU2VydmljZSBjYWxsYmFja1xuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEB0ZW1wbGF0ZSBUUmVxIGV4dGVuZHMgTWVzc2FnZTxUUmVxPlxuICogQHRlbXBsYXRlIFRSZXMgZXh0ZW5kcyBNZXNzYWdlPFRSZXM+XG4gKi9cblNlcnZpY2UucHJvdG90eXBlLnJwY0NhbGwgPSBmdW5jdGlvbiBycGNDYWxsKG1ldGhvZCwgcmVxdWVzdEN0b3IsIHJlc3BvbnNlQ3RvciwgcmVxdWVzdCwgY2FsbGJhY2spIHtcblxuICAgIGlmICghcmVxdWVzdClcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKFwicmVxdWVzdCBtdXN0IGJlIHNwZWNpZmllZFwiKTtcblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIWNhbGxiYWNrKVxuICAgICAgICByZXR1cm4gdXRpbC5hc1Byb21pc2UocnBjQ2FsbCwgc2VsZiwgbWV0aG9kLCByZXF1ZXN0Q3RvciwgcmVzcG9uc2VDdG9yLCByZXF1ZXN0KTtcblxuICAgIGlmICghc2VsZi5ycGNJbXBsKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKEVycm9yKFwiYWxyZWFkeSBlbmRlZFwiKSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzZWxmLnJwY0ltcGwoXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICByZXF1ZXN0Q3RvcltzZWxmLnJlcXVlc3REZWxpbWl0ZWQgPyBcImVuY29kZURlbGltaXRlZFwiIDogXCJlbmNvZGVcIl0ocmVxdWVzdCkuZmluaXNoKCksXG4gICAgICAgICAgICBmdW5jdGlvbiBycGNDYWxsYmFjayhlcnIsIHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVyciwgbWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZW5kKC8qIGVuZGVkQnlSUEMgKi8gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgaW5zdGFuY2VvZiByZXNwb25zZUN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlQ3RvcltzZWxmLnJlc3BvbnNlRGVsaW1pdGVkID8gXCJkZWNvZGVEZWxpbWl0ZWRcIiA6IFwiZGVjb2RlXCJdKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnIsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlbGYuZW1pdChcImRhdGFcIiwgcmVzcG9uc2UsIG1ldGhvZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgZXJyLCBtZXRob2QpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFjayhlcnIpOyB9LCAwKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG4vKipcbiAqIEVuZHMgdGhpcyBzZXJ2aWNlIGFuZCBlbWl0cyB0aGUgYGVuZGAgZXZlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtlbmRlZEJ5UlBDPWZhbHNlXSBXaGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBiZWVuIGVuZGVkIGJ5IHRoZSBSUEMgaW1wbGVtZW50YXRpb24uXG4gKiBAcmV0dXJucyB7cnBjLlNlcnZpY2V9IGB0aGlzYFxuICovXG5TZXJ2aWNlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiBlbmQoZW5kZWRCeVJQQykge1xuICAgIGlmICh0aGlzLnJwY0ltcGwpIHtcbiAgICAgICAgaWYgKCFlbmRlZEJ5UlBDKSAvLyBzaWduYWwgZW5kIHRvIHJwY0ltcGxcbiAgICAgICAgICAgIHRoaXMucnBjSW1wbChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgICAgdGhpcy5ycGNJbXBsID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbWl0KFwiZW5kXCIpLm9mZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBTdHJlYW1pbmcgUlBDIGhlbHBlcnMuXG4gKiBAbmFtZXNwYWNlXG4gKi9cbnZhciBycGMgPSBleHBvcnRzO1xuXG4vKipcbiAqIFJQQyBpbXBsZW1lbnRhdGlvbiBwYXNzZWQgdG8ge0BsaW5rIFNlcnZpY2UjY3JlYXRlfSBwZXJmb3JtaW5nIGEgc2VydmljZSByZXF1ZXN0IG9uIG5ldHdvcmsgbGV2ZWwsIGkuZS4gYnkgdXRpbGl6aW5nIGh0dHAgcmVxdWVzdHMgb3Igd2Vic29ja2V0cy5cbiAqIEB0eXBlZGVmIFJQQ0ltcGxcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7TWV0aG9kfHJwYy5TZXJ2aWNlTWV0aG9kPE1lc3NhZ2U8e30+LE1lc3NhZ2U8e30+Pn0gbWV0aG9kIFJlZmxlY3RlZCBvciBzdGF0aWMgbWV0aG9kIGJlaW5nIGNhbGxlZFxuICogQHBhcmFtIHtVaW50OEFycmF5fSByZXF1ZXN0RGF0YSBSZXF1ZXN0IGRhdGFcbiAqIEBwYXJhbSB7UlBDSW1wbENhbGxiYWNrfSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBycGNJbXBsKG1ldGhvZCwgcmVxdWVzdERhdGEsIGNhbGxiYWNrKSB7XG4gKiAgICAgaWYgKHByb3RvYnVmLnV0aWwubGNGaXJzdChtZXRob2QubmFtZSkgIT09IFwibXlNZXRob2RcIikgLy8gY29tcGF0aWJsZSB3aXRoIHN0YXRpYyBjb2RlXG4gKiAgICAgICAgIHRocm93IEVycm9yKFwibm8gc3VjaCBtZXRob2RcIik7XG4gKiAgICAgYXN5bmNocm9ub3VzbHlPYnRhaW5BUmVzcG9uc2UocmVxdWVzdERhdGEsIGZ1bmN0aW9uKGVyciwgcmVzcG9uc2VEYXRhKSB7XG4gKiAgICAgICAgIGNhbGxiYWNrKGVyciwgcmVzcG9uc2VEYXRhKTtcbiAqICAgICB9KTtcbiAqIH1cbiAqL1xuXG4vKipcbiAqIE5vZGUtc3R5bGUgY2FsbGJhY2sgYXMgdXNlZCBieSB7QGxpbmsgUlBDSW1wbH0uXG4gKiBAdHlwZWRlZiBSUENJbXBsQ2FsbGJhY2tcbiAqIEB0eXBlIHtmdW5jdGlvbn1cbiAqIEBwYXJhbSB7RXJyb3J8bnVsbH0gZXJyb3IgRXJyb3IsIGlmIGFueSwgb3RoZXJ3aXNlIGBudWxsYFxuICogQHBhcmFtIHtVaW50OEFycmF5fG51bGx9IFtyZXNwb25zZV0gUmVzcG9uc2UgZGF0YSBvciBgbnVsbGAgdG8gc2lnbmFsIGVuZCBvZiBzdHJlYW0sIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5cbnJwYy5TZXJ2aWNlID0gcmVxdWlyZShcIi4vcnBjL3NlcnZpY2VcIik7XG4iLCJcInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKlxuICogTmFtZWQgcm9vdHMuXG4gKiBUaGlzIGlzIHdoZXJlIHBianMgc3RvcmVzIGdlbmVyYXRlZCBzdHJ1Y3R1cmVzICh0aGUgb3B0aW9uIGAtciwgLS1yb290YCBzcGVjaWZpZXMgYSBuYW1lKS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgbWFudWFsbHkgdG8gbWFrZSByb290cyBhdmFpbGFibGUgYWNjcm9zcyBtb2R1bGVzLlxuICogQG5hbWUgcm9vdHNcbiAqIEB0eXBlIHtPYmplY3QuPHN0cmluZyxSb290Pn1cbiAqIEBleGFtcGxlXG4gKiAvLyBwYmpzIC1yIG15cm9vdCAtbyBjb21waWxlZC5qcyAuLi5cbiAqXG4gKiAvLyBpbiBhbm90aGVyIG1vZHVsZTpcbiAqIHJlcXVpcmUoXCIuL2NvbXBpbGVkLmpzXCIpO1xuICpcbiAqIC8vIGluIGFueSBzdWJzZXF1ZW50IG1vZHVsZTpcbiAqIHZhciByb290ID0gcHJvdG9idWYucm9vdHNbXCJteXJvb3RcIl07XG4gKi9cbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIHByb3RvYnVmID0gZXhwb3J0cztcblxuLyoqXG4gKiBCdWlsZCB0eXBlLCBvbmUgb2YgYFwiZnVsbFwiYCwgYFwibGlnaHRcImAgb3IgYFwibWluaW1hbFwiYC5cbiAqIEBuYW1lIGJ1aWxkXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGNvbnN0XG4gKi9cbnByb3RvYnVmLmJ1aWxkID0gXCJtaW5pbWFsXCI7XG5cbi8vIFNlcmlhbGl6YXRpb25cbnByb3RvYnVmLldyaXRlciAgICAgICA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKTtcbnByb3RvYnVmLkJ1ZmZlcldyaXRlciA9IHJlcXVpcmUoXCIuL3dyaXRlcl9idWZmZXJcIik7XG5wcm90b2J1Zi5SZWFkZXIgICAgICAgPSByZXF1aXJlKFwiLi9yZWFkZXJcIik7XG5wcm90b2J1Zi5CdWZmZXJSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWFkZXJfYnVmZmVyXCIpO1xuXG4vLyBVdGlsaXR5XG5wcm90b2J1Zi51dGlsICAgICAgICAgPSByZXF1aXJlKFwiLi91dGlsL21pbmltYWxcIik7XG5wcm90b2J1Zi5ycGMgICAgICAgICAgPSByZXF1aXJlKFwiLi9ycGNcIik7XG5wcm90b2J1Zi5yb290cyAgICAgICAgPSByZXF1aXJlKFwiLi9yb290c1wiKTtcbnByb3RvYnVmLmNvbmZpZ3VyZSAgICA9IGNvbmZpZ3VyZTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qKlxuICogUmVjb25maWd1cmVzIHRoZSBsaWJyYXJ5IGFjY29yZGluZyB0byB0aGUgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmUoKSB7XG4gICAgcHJvdG9idWYudXRpbC5fY29uZmlndXJlKCk7XG4gICAgcHJvdG9idWYuV3JpdGVyLl9jb25maWd1cmUocHJvdG9idWYuQnVmZmVyV3JpdGVyKTtcbiAgICBwcm90b2J1Zi5SZWFkZXIuX2NvbmZpZ3VyZShwcm90b2J1Zi5CdWZmZXJSZWFkZXIpO1xufVxuXG4vLyBTZXQgdXAgYnVmZmVyIHV0aWxpdHkgYWNjb3JkaW5nIHRvIHRoZSBlbnZpcm9ubWVudFxuY29uZmlndXJlKCk7XG4iLCIvLyBtaW5pbWFsIGxpYnJhcnkgZW50cnkgcG9pbnQuXG5cblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9zcmMvaW5kZXgtbWluaW1hbFwiKTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdG9yIHtcbiAgc3RhdGVzOiBQQkFuaW1hdGlvblN0YXRlW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkFuaW1hdGlvblN0YXRlIHtcbiAgbmFtZTogc3RyaW5nXG4gIGNsaXA6IHN0cmluZ1xuICBwbGF5aW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjBzICovXG4gIHdlaWdodD86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgc3BlZWQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBsb29wPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzaG91bGRSZXNldD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKTogUEJBbmltYXRvciB7XG4gIHJldHVybiB7IHN0YXRlczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdG9yID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRvciwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnN0YXRlcykge1xuICAgICAgUEJBbmltYXRpb25TdGF0ZS5lbmNvZGUodiEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQW5pbWF0b3Ige1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQW5pbWF0b3IoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnN0YXRlcy5wdXNoKFBCQW5pbWF0aW9uU3RhdGUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQW5pbWF0aW9uU3RhdGUoKTogUEJBbmltYXRpb25TdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJycsXG4gICAgY2xpcDogJycsXG4gICAgcGxheWluZzogdW5kZWZpbmVkLFxuICAgIHdlaWdodDogdW5kZWZpbmVkLFxuICAgIHNwZWVkOiB1bmRlZmluZWQsXG4gICAgbG9vcDogdW5kZWZpbmVkLFxuICAgIHNob3VsZFJlc2V0OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkFuaW1hdGlvblN0YXRlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBbmltYXRpb25TdGF0ZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwKS5zdHJpbmcobWVzc2FnZS5uYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jbGlwICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UuY2xpcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxheWluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UucGxheWluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2VpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzcpLmZsb2F0KG1lc3NhZ2Uud2VpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcGVlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ1KS5mbG9hdChtZXNzYWdlLnNwZWVkKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sb29wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDgpLmJvb2wobWVzc2FnZS5sb29wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaG91bGRSZXNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDU2KS5ib29sKG1lc3NhZ2Uuc2hvdWxkUmVzZXQpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkFuaW1hdGlvblN0YXRlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkFuaW1hdGlvblN0YXRlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5uYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuY2xpcCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnBsYXlpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uud2VpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5zcGVlZCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UubG9vcCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5zaG91bGRSZXNldCA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBbmltYXRvciB9IGZyb20gJy4vcGIvQW5pbWF0b3IuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQW5pbWF0b3JTY2hlbWE6IElTY2hlbWE8UEJBbmltYXRvcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBbmltYXRvciwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQW5pbWF0b3IuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQW5pbWF0b3Ige1xuICAgIHJldHVybiBQQkFuaW1hdG9yLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBbmltYXRvciB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQW5pbWF0b3IuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF1ZGlvU291cmNlIHtcbiAgcGxheWluZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICB2b2x1bWU/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgbG9vcD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICBwaXRjaD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBhdWRpb0NsaXBVcmw6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgcmV0dXJuIHsgcGxheWluZzogdW5kZWZpbmVkLCB2b2x1bWU6IHVuZGVmaW5lZCwgbG9vcDogdW5kZWZpbmVkLCBwaXRjaDogdW5kZWZpbmVkLCBhdWRpb0NsaXBVcmw6ICcnIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdWRpb1NvdXJjZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXVkaW9Tb3VyY2UsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5wbGF5aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnBsYXlpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZvbHVtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnZvbHVtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubG9vcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UubG9vcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGl0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNykuZmxvYXQobWVzc2FnZS5waXRjaClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYXVkaW9DbGlwVXJsICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXVkaW9DbGlwVXJsKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJBdWRpb1NvdXJjZSgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucGxheWluZyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS52b2x1bWUgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmxvb3AgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2UucGl0Y2ggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmF1ZGlvQ2xpcFVybCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF1ZGlvU291cmNlIH0gZnJvbSAnLi9wYi9BdWRpb1NvdXJjZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDIwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBdWRpb1NvdXJjZVNjaGVtYTogSVNjaGVtYTxQQkF1ZGlvU291cmNlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF1ZGlvU291cmNlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJBdWRpb1NvdXJjZS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdWRpb1NvdXJjZSB7XG4gICAgcmV0dXJuIFBCQXVkaW9Tb3VyY2UuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkF1ZGlvU291cmNlIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdWRpb1NvdXJjZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJBbmNob3JQb2ludCB7XG4gIFBPU0lUSU9OID0gMCxcbiAgTkFNRV9UQUcgPSAxLFxuICBMRUZUX0hBTkQgPSAyLFxuICBSSUdIVF9IQU5EID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhckF0dGFjaCB7XG4gIGF2YXRhcklkOiBzdHJpbmdcbiAgYW5jaG9yUG9pbnRJZDogQXZhdGFyQW5jaG9yUG9pbnRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCQXZhdGFyQXR0YWNoKCk6IFBCQXZhdGFyQXR0YWNoIHtcbiAgcmV0dXJuIHsgYXZhdGFySWQ6ICcnLCBhbmNob3JQb2ludElkOiAwIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJBdmF0YXJBdHRhY2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkF2YXRhckF0dGFjaCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmF2YXRhcklkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuYXZhdGFySWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFuY2hvclBvaW50SWQgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYW5jaG9yUG9pbnRJZClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQXZhdGFyQXR0YWNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhckF0dGFjaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYXZhdGFySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5hbmNob3JQb2ludElkID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQXZhdGFyQXR0YWNoIH0gZnJvbSAnLi9wYi9BdmF0YXJBdHRhY2guZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA3M1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyQXR0YWNoU2NoZW1hOiBJU2NoZW1hPFBCQXZhdGFyQXR0YWNoPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkF2YXRhckF0dGFjaCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyQXR0YWNoLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkF2YXRhckF0dGFjaCB7XG4gICAgcmV0dXJuIFBCQXZhdGFyQXR0YWNoLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJBdHRhY2gge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkF2YXRhckF0dGFjaC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFZlY3RvcjMge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIHo6IG51bWJlclxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlVmVjdG9yMygpOiBWZWN0b3IzIHtcbiAgcmV0dXJuIHsgeDogMCwgeTogMCwgejogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZlY3RvcjMgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBWZWN0b3IzLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMykuZmxvYXQobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDIxKS5mbG9hdChtZXNzYWdlLnkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnogIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjkpLmZsb2F0KG1lc3NhZ2UueilcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFZlY3RvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVZlY3RvcjMoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnogPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IFZlY3RvcjMgfSBmcm9tICcuL2NvbW1vbi9WZWN0b3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgY29uc3QgZW51bSBBdmF0YXJNb2RpZmllciB7XG4gIEhJREVfQVZBVEFSUyA9IDAsXG4gIERJU0FCTEVfUEFTU1BPUlRTID0gMSxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZXhjbHVkZUlkczogc3RyaW5nW11cbiAgbW9kaWZpZXJzOiBBdmF0YXJNb2RpZmllcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkF2YXRhck1vZGlmaWVyQXJlYSgpOiBQQkF2YXRhck1vZGlmaWVyQXJlYSB7XG4gIHJldHVybiB7IGFyZWE6IHVuZGVmaW5lZCwgZXhjbHVkZUlkczogW10sIG1vZGlmaWVyczogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhck1vZGlmaWVyQXJlYSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQXZhdGFyTW9kaWZpZXJBcmVhLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYXJlYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLmFyZWEsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2UuZXhjbHVkZUlkcykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKHYhKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDI2KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS5tb2RpZmllcnMpIHtcbiAgICAgIHdyaXRlci5pbnQzMih2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQXZhdGFyTW9kaWZpZXJBcmVhKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5hcmVhID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZXhjbHVkZUlkcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLm1vZGlmaWVycy5wdXNoKHJlYWRlci5pbnQzMigpIGFzIGFueSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS5tb2RpZmllcnMucHVzaChyZWFkZXIuaW50MzIoKSBhcyBhbnkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQkF2YXRhck1vZGlmaWVyQXJlYSB9IGZyb20gJy4vcGIvQXZhdGFyTW9kaWZpZXJBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYTogSVNjaGVtYTxQQkF2YXRhck1vZGlmaWVyQXJlYT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJNb2RpZmllckFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkF2YXRhck1vZGlmaWVyQXJlYS5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJBdmF0YXJNb2RpZmllckFyZWEge1xuICAgIHJldHVybiBQQkF2YXRhck1vZGlmaWVyQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQXZhdGFyTW9kaWZpZXJBcmVhIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJBdmF0YXJNb2RpZmllckFyZWEuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gTG9uZztcclxuXHJcbi8qKlxyXG4gKiB3YXNtIG9wdGltaXphdGlvbnMsIHRvIGRvIG5hdGl2ZSBpNjQgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlkZVxyXG4gKi9cclxudmFyIHdhc20gPSBudWxsO1xyXG5cclxudHJ5IHtcclxuICB3YXNtID0gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUobmV3IFVpbnQ4QXJyYXkoW1xyXG4gICAgMCwgOTcsIDExNSwgMTA5LCAxLCAwLCAwLCAwLCAxLCAxMywgMiwgOTYsIDAsIDEsIDEyNywgOTYsIDQsIDEyNywgMTI3LCAxMjcsIDEyNywgMSwgMTI3LCAzLCA3LCA2LCAwLCAxLCAxLCAxLCAxLCAxLCA2LCA2LCAxLCAxMjcsIDEsIDY1LCAwLCAxMSwgNywgNTAsIDYsIDMsIDEwOSwgMTE3LCAxMDgsIDAsIDEsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTUsIDAsIDIsIDUsIDEwMCwgMTA1LCAxMTgsIDk1LCAxMTcsIDAsIDMsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTUsIDAsIDQsIDUsIDExNCwgMTAxLCAxMDksIDk1LCAxMTcsIDAsIDUsIDgsIDEwMywgMTAxLCAxMTYsIDk1LCAxMDQsIDEwNSwgMTAzLCAxMDQsIDAsIDAsIDEwLCAxOTEsIDEsIDYsIDQsIDAsIDM1LCAwLCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI2LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMjcsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTEsIDM2LCAxLCAxLCAxMjYsIDMyLCAwLCAxNzMsIDMyLCAxLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDMyLCAyLCAxNzMsIDMyLCAzLCAxNzMsIDY2LCAzMiwgMTM0LCAxMzIsIDEyOCwgMzQsIDQsIDY2LCAzMiwgMTM1LCAxNjcsIDM2LCAwLCAzMiwgNCwgMTY3LCAxMSwgMzYsIDEsIDEsIDEyNiwgMzIsIDAsIDE3MywgMzIsIDEsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMzIsIDIsIDE3MywgMzIsIDMsIDE3MywgNjYsIDMyLCAxMzQsIDEzMiwgMTI5LCAzNCwgNCwgNjYsIDMyLCAxMzUsIDE2NywgMzYsIDAsIDMyLCA0LCAxNjcsIDExLCAzNiwgMSwgMSwgMTI2LCAzMiwgMCwgMTczLCAzMiwgMSwgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAzMiwgMiwgMTczLCAzMiwgMywgMTczLCA2NiwgMzIsIDEzNCwgMTMyLCAxMzAsIDM0LCA0LCA2NiwgMzIsIDEzNSwgMTY3LCAzNiwgMCwgMzIsIDQsIDE2NywgMTFcclxuICBdKSksIHt9KS5leHBvcnRzO1xyXG59IGNhdGNoIChlKSB7XHJcbiAgLy8gbm8gd2FzbSBzdXBwb3J0IDooXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25zdHJ1Y3RzIGEgNjQgYml0IHR3bydzLWNvbXBsZW1lbnQgaW50ZWdlciwgZ2l2ZW4gaXRzIGxvdyBhbmQgaGlnaCAzMiBiaXQgdmFsdWVzIGFzICpzaWduZWQqIGludGVnZXJzLlxyXG4gKiAgU2VlIHRoZSBmcm9tKiBmdW5jdGlvbnMgYmVsb3cgZm9yIG1vcmUgY29udmVuaWVudCB3YXlzIG9mIGNvbnN0cnVjdGluZyBMb25ncy5cclxuICogQGV4cG9ydHMgTG9uZ1xyXG4gKiBAY2xhc3MgQSBMb25nIGNsYXNzIGZvciByZXByZXNlbnRpbmcgYSA2NCBiaXQgdHdvJ3MtY29tcGxlbWVudCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gbG93IFRoZSBsb3cgKHNpZ25lZCkgMzIgYml0cyBvZiB0aGUgbG9uZ1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaCBUaGUgaGlnaCAoc2lnbmVkKSAzMiBiaXRzIG9mIHRoZSBsb25nXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBMb25nKGxvdywgaGlnaCwgdW5zaWduZWQpIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBsb3cgMzIgYml0cyBhcyBhIHNpZ25lZCB2YWx1ZS5cclxuICAgICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICAgKi9cclxuICAgIHRoaXMubG93ID0gbG93IHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoaWdoIDMyIGJpdHMgYXMgYSBzaWduZWQgdmFsdWUuXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICB0aGlzLmhpZ2ggPSBoaWdoIHwgMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKi9cclxuICAgIHRoaXMudW5zaWduZWQgPSAhIXVuc2lnbmVkO1xyXG59XHJcblxyXG4vLyBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBsb25nIGlzIHRoZSB0d28gZ2l2ZW4gc2lnbmVkLCAzMi1iaXQgdmFsdWVzLlxyXG4vLyBXZSB1c2UgMzItYml0IHBpZWNlcyBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgc2l6ZSBvZiBpbnRlZ2VycyBvbiB3aGljaFxyXG4vLyBKYXZhc2NyaXB0IHBlcmZvcm1zIGJpdC1vcGVyYXRpb25zLiAgRm9yIG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiBhbmRcclxuLy8gbXVsdGlwbGljYXRpb24sIHdlIHNwbGl0IGVhY2ggbnVtYmVyIGludG8gMTYgYml0IHBpZWNlcywgd2hpY2ggY2FuIGVhc2lseSBiZVxyXG4vLyBtdWx0aXBsaWVkIHdpdGhpbiBKYXZhc2NyaXB0J3MgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gd2l0aG91dCBvdmVyZmxvd1xyXG4vLyBvciBjaGFuZ2UgaW4gc2lnbi5cclxuLy9cclxuLy8gSW4gdGhlIGFsZ29yaXRobXMgYmVsb3csIHdlIGZyZXF1ZW50bHkgcmVkdWNlIHRoZSBuZWdhdGl2ZSBjYXNlIHRvIHRoZVxyXG4vLyBwb3NpdGl2ZSBjYXNlIGJ5IG5lZ2F0aW5nIHRoZSBpbnB1dChzKSBhbmQgdGhlbiBwb3N0LXByb2Nlc3NpbmcgdGhlIHJlc3VsdC5cclxuLy8gTm90ZSB0aGF0IHdlIG11c3QgQUxXQVlTIGNoZWNrIHNwZWNpYWxseSB3aGV0aGVyIHRob3NlIHZhbHVlcyBhcmUgTUlOX1ZBTFVFXHJcbi8vICgtMl42MykgYmVjYXVzZSAtTUlOX1ZBTFVFID09IE1JTl9WQUxVRSAoc2luY2UgMl42MyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXNcclxuLy8gYSBwb3NpdGl2ZSBudW1iZXIsIGl0IG92ZXJmbG93cyBiYWNrIGludG8gYSBuZWdhdGl2ZSkuICBOb3QgaGFuZGxpbmcgdGhpc1xyXG4vLyBjYXNlIHdvdWxkIG9mdGVuIHJlc3VsdCBpbiBpbmZpbml0ZSByZWN1cnNpb24uXHJcbi8vXHJcbi8vIENvbW1vbiBjb25zdGFudCB2YWx1ZXMgWkVSTywgT05FLCBORUdfT05FLCBldGMuIGFyZSBkZWZpbmVkIGJlbG93IHRoZSBmcm9tKlxyXG4vLyBtZXRob2RzIG9uIHdoaWNoIHRoZXkgZGVwZW5kLlxyXG5cclxuLyoqXHJcbiAqIEFuIGluZGljYXRvciB1c2VkIHRvIHJlbGlhYmx5IGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgYSBMb25nIG9yIG5vdC5cclxuICogQHR5cGUge2Jvb2xlYW59XHJcbiAqIEBjb25zdFxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxuTG9uZy5wcm90b3R5cGUuX19pc0xvbmdfXztcclxuXHJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMb25nLnByb3RvdHlwZSwgXCJfX2lzTG9uZ19fXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcblxyXG4vKipcclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBpc0xvbmcob2JqKSB7XHJcbiAgICByZXR1cm4gKG9iaiAmJiBvYmpbXCJfX2lzTG9uZ19fXCJdKSA9PT0gdHJ1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgTG9uZy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gb2JqIE9iamVjdFxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmcuaXNMb25nID0gaXNMb25nO1xyXG5cclxuLyoqXHJcbiAqIEEgY2FjaGUgb2YgdGhlIExvbmcgcmVwcmVzZW50YXRpb25zIG9mIHNtYWxsIGludGVnZXIgdmFsdWVzLlxyXG4gKiBAdHlwZSB7IU9iamVjdH1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQSBjYWNoZSBvZiB0aGUgTG9uZyByZXByZXNlbnRhdGlvbnMgb2Ygc21hbGwgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuXHJcbiAqIEB0eXBlIHshT2JqZWN0fVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVSU5UX0NBQ0hFID0ge307XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBmcm9tSW50KHZhbHVlLCB1bnNpZ25lZCkge1xyXG4gICAgdmFyIG9iaiwgY2FjaGVkT2JqLCBjYWNoZTtcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIHZhbHVlID4+Pj0gMDtcclxuICAgICAgICBpZiAoY2FjaGUgPSAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8IDI1NikpIHtcclxuICAgICAgICAgICAgY2FjaGVkT2JqID0gVUlOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgKHZhbHVlIHwgMCkgPCAwID8gLTEgOiAwLCB0cnVlKTtcclxuICAgICAgICBpZiAoY2FjaGUpXHJcbiAgICAgICAgICAgIFVJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlIHw9IDA7XHJcbiAgICAgICAgaWYgKGNhY2hlID0gKC0xMjggPD0gdmFsdWUgJiYgdmFsdWUgPCAxMjgpKSB7XHJcbiAgICAgICAgICAgIGNhY2hlZE9iaiA9IElOVF9DQUNIRVt2YWx1ZV07XHJcbiAgICAgICAgICAgIGlmIChjYWNoZWRPYmopXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkT2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmogPSBmcm9tQml0cyh2YWx1ZSwgdmFsdWUgPCAwID8gLTEgOiAwLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKGNhY2hlKVxyXG4gICAgICAgICAgICBJTlRfQ0FDSEVbdmFsdWVdID0gb2JqO1xyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRpbmcgdGhlIGdpdmVuIDMyIGJpdCBpbnRlZ2VyIHZhbHVlLlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIFRoZSAzMiBiaXQgaW50ZWdlciBpbiBxdWVzdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tSW50ID0gZnJvbUludDtcclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21OdW1iZXIodmFsdWUsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKVxyXG4gICAgICAgIHJldHVybiB1bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIGlmICh1bnNpZ25lZCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgICAgIHJldHVybiBVWkVSTztcclxuICAgICAgICBpZiAodmFsdWUgPj0gVFdPX1BXUl82NF9EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNQVhfVU5TSUdORURfVkFMVUU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8PSAtVFdPX1BXUl82M19EQkwpXHJcbiAgICAgICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICAgICAgaWYgKHZhbHVlICsgMSA+PSBUV09fUFdSXzYzX0RCTClcclxuICAgICAgICAgICAgcmV0dXJuIE1BWF9WQUxVRTtcclxuICAgIH1cclxuICAgIGlmICh2YWx1ZSA8IDApXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIoLXZhbHVlLCB1bnNpZ25lZCkubmVnKCk7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKHZhbHVlICUgVFdPX1BXUl8zMl9EQkwpIHwgMCwgKHZhbHVlIC8gVFdPX1BXUl8zMl9EQkwpIHwgMCwgdW5zaWduZWQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIExvbmcgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiB2YWx1ZSwgcHJvdmlkZWQgdGhhdCBpdCBpcyBhIGZpbml0ZSBudW1iZXIuIE90aGVyd2lzZSwgemVybyBpcyByZXR1cm5lZC5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgbnVtYmVyIGluIHF1ZXN0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21OdW1iZXIgPSBmcm9tTnVtYmVyO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoaWdoQml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbUJpdHMobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcobG93Qml0cywgaGlnaEJpdHMsIHVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBMb25nIHJlcHJlc2VudGluZyB0aGUgNjQgYml0IGludGVnZXIgdGhhdCBjb21lcyBieSBjb25jYXRlbmF0aW5nIHRoZSBnaXZlbiBsb3cgYW5kIGhpZ2ggYml0cy4gRWFjaCBpc1xyXG4gKiAgYXNzdW1lZCB0byB1c2UgMzIgYml0cy5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb3dCaXRzIFRoZSBsb3cgMzIgYml0c1xyXG4gKiBAcGFyYW0ge251bWJlcn0gaGlnaEJpdHMgVGhlIGhpZ2ggMzIgYml0c1xyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQml0cyA9IGZyb21CaXRzO1xyXG5cclxuLyoqXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcn0gYmFzZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZXhwb25lbnRcclxuICogQHJldHVybnMge251bWJlcn1cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgcG93X2RibCA9IE1hdGgucG93OyAvLyBVc2VkIDQgdGltZXMgKDQqOCB0byAxNSs0KVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcclxuICogQHBhcmFtIHsoYm9vbGVhbnxudW1iZXIpPX0gdW5zaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeFxyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxuZnVuY3Rpb24gZnJvbVN0cmluZyhzdHIsIHVuc2lnbmVkLCByYWRpeCkge1xyXG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApXHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ2VtcHR5IHN0cmluZycpO1xyXG4gICAgaWYgKHN0ciA9PT0gXCJOYU5cIiB8fCBzdHIgPT09IFwiSW5maW5pdHlcIiB8fCBzdHIgPT09IFwiK0luZmluaXR5XCIgfHwgc3RyID09PSBcIi1JbmZpbml0eVwiKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKHR5cGVvZiB1bnNpZ25lZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAvLyBGb3IgZ29vZy5tYXRoLmxvbmcgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgIHJhZGl4ID0gdW5zaWduZWQsXHJcbiAgICAgICAgdW5zaWduZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdW5zaWduZWQgPSAhISB1bnNpZ25lZDtcclxuICAgIH1cclxuICAgIHJhZGl4ID0gcmFkaXggfHwgMTA7XHJcbiAgICBpZiAocmFkaXggPCAyIHx8IDM2IDwgcmFkaXgpXHJcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcigncmFkaXgnKTtcclxuXHJcbiAgICB2YXIgcDtcclxuICAgIGlmICgocCA9IHN0ci5pbmRleE9mKCctJykpID4gMClcclxuICAgICAgICB0aHJvdyBFcnJvcignaW50ZXJpb3IgaHlwaGVuJyk7XHJcbiAgICBlbHNlIGlmIChwID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcoc3RyLnN1YnN0cmluZygxKSwgdW5zaWduZWQsIHJhZGl4KS5uZWcoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg4KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDgpKTtcclxuXHJcbiAgICB2YXIgcmVzdWx0ID0gWkVSTztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSArPSA4KSB7XHJcbiAgICAgICAgdmFyIHNpemUgPSBNYXRoLm1pbig4LCBzdHIubGVuZ3RoIC0gaSksXHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQoc3RyLnN1YnN0cmluZyhpLCBpICsgc2l6ZSksIHJhZGl4KTtcclxuICAgICAgICBpZiAoc2l6ZSA8IDgpIHtcclxuICAgICAgICAgICAgdmFyIHBvd2VyID0gZnJvbU51bWJlcihwb3dfZGJsKHJhZGl4LCBzaXplKSk7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5tdWwocG93ZXIpLmFkZChmcm9tTnVtYmVyKHZhbHVlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm11bChyYWRpeFRvUG93ZXIpO1xyXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuYWRkKGZyb21OdW1iZXIodmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHQudW5zaWduZWQgPSB1bnNpZ25lZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgTG9uZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gc3RyaW5nLCB3cml0dGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBMb25nXHJcbiAqIEBwYXJhbSB7KGJvb2xlYW58bnVtYmVyKT19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtudW1iZXI9fSByYWRpeCBUaGUgcmFkaXggaW4gd2hpY2ggdGhlIHRleHQgaXMgd3JpdHRlbiAoMi0zNiksIGRlZmF1bHRzIHRvIDEwXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tU3RyaW5nID0gZnJvbVN0cmluZztcclxuXHJcbi8qKlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfCF7bG93OiBudW1iZXIsIGhpZ2g6IG51bWJlciwgdW5zaWduZWQ6IGJvb2xlYW59fSB2YWxcclxuICogQHBhcmFtIHtib29sZWFuPX0gdW5zaWduZWRcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbmZ1bmN0aW9uIGZyb21WYWx1ZSh2YWwsIHVuc2lnbmVkKSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodmFsLCB1bnNpZ25lZCk7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgcmV0dXJuIGZyb21TdHJpbmcodmFsLCB1bnNpZ25lZCk7XHJcbiAgICAvLyBUaHJvd3MgZm9yIG5vbi1vYmplY3RzLCBjb252ZXJ0cyBub24taW5zdGFuY2VvZiBMb25nOlxyXG4gICAgcmV0dXJuIGZyb21CaXRzKHZhbC5sb3csIHZhbC5oaWdoLCB0eXBlb2YgdW5zaWduZWQgPT09ICdib29sZWFuJyA/IHVuc2lnbmVkIDogdmFsLnVuc2lnbmVkKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoZSBzcGVjaWZpZWQgdmFsdWUgdG8gYSBMb25nIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBmcm9tKiBmdW5jdGlvbiBmb3IgaXRzIHR5cGUuXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd8IXtsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCB1bnNpZ25lZDogYm9vbGVhbn19IHZhbCBWYWx1ZVxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmcuZnJvbVZhbHVlID0gZnJvbVZhbHVlO1xyXG5cclxuLy8gTk9URTogdGhlIGNvbXBpbGVyIHNob3VsZCBpbmxpbmUgdGhlc2UgY29uc3RhbnQgdmFsdWVzIGJlbG93IGFuZCB0aGVuIHJlbW92ZSB0aGVzZSB2YXJpYWJsZXMsIHNvIHRoZXJlIHNob3VsZCBiZVxyXG4vLyBubyBydW50aW1lIHBlbmFsdHkgZm9yIHRoZXNlLlxyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzE2X0RCTCA9IDEgPDwgMTY7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjRfREJMID0gMSA8PCAyNDtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7bnVtYmVyfVxyXG4gKiBAY29uc3RcclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVFdPX1BXUl8zMl9EQkwgPSBUV09fUFdSXzE2X0RCTCAqIFRXT19QV1JfMTZfREJMO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHtudW1iZXJ9XHJcbiAqIEBjb25zdFxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBUV09fUFdSXzY0X0RCTCA9IFRXT19QV1JfMzJfREJMICogVFdPX1BXUl8zMl9EQkw7XHJcblxyXG4vKipcclxuICogQHR5cGUge251bWJlcn1cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfNjNfREJMID0gVFdPX1BXUl82NF9EQkwgLyAyO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGNvbnN0XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFRXT19QV1JfMjQgPSBmcm9tSW50KFRXT19QV1JfMjRfREJMKTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIFpFUk8gPSBmcm9tSW50KDApO1xyXG5cclxuLyoqXHJcbiAqIFNpZ25lZCB6ZXJvLlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nLlpFUk8gPSBaRVJPO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgVVpFUk8gPSBmcm9tSW50KDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIFVuc2lnbmVkIHplcm8uXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVVpFUk8gPSBVWkVSTztcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE9ORSA9IGZyb21JbnQoMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5PTkUgPSBPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBVT05FID0gZnJvbUludCgxLCB0cnVlKTtcclxuXHJcbi8qKlxyXG4gKiBVbnNpZ25lZCBvbmUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuVU9ORSA9IFVPTkU7XHJcblxyXG4vKipcclxuICogQHR5cGUgeyFMb25nfVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBORUdfT05FID0gZnJvbUludCgtMSk7XHJcblxyXG4vKipcclxuICogU2lnbmVkIG5lZ2F0aXZlIG9uZS5cclxuICogQHR5cGUgeyFMb25nfVxyXG4gKi9cclxuTG9uZy5ORUdfT05FID0gTkVHX09ORTtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7IUxvbmd9XHJcbiAqIEBpbm5lclxyXG4gKi9cclxudmFyIE1BWF9WQUxVRSA9IGZyb21CaXRzKDB4RkZGRkZGRkZ8MCwgMHg3RkZGRkZGRnwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWF4aW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1ZBTFVFID0gTUFYX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUFYX1VOU0lHTkVEX1ZBTFVFID0gZnJvbUJpdHMoMHhGRkZGRkZGRnwwLCAweEZGRkZGRkZGfDAsIHRydWUpO1xyXG5cclxuLyoqXHJcbiAqIE1heGltdW0gdW5zaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUFYX1VOU0lHTkVEX1ZBTFVFID0gTUFYX1VOU0lHTkVEX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICogQGlubmVyXHJcbiAqL1xyXG52YXIgTUlOX1ZBTFVFID0gZnJvbUJpdHMoMCwgMHg4MDAwMDAwMHwwLCBmYWxzZSk7XHJcblxyXG4vKipcclxuICogTWluaW11bSBzaWduZWQgdmFsdWUuXHJcbiAqIEB0eXBlIHshTG9uZ31cclxuICovXHJcbkxvbmcuTUlOX1ZBTFVFID0gTUlOX1ZBTFVFO1xyXG5cclxuLyoqXHJcbiAqIEBhbGlhcyBMb25nLnByb3RvdHlwZVxyXG4gKiBAaW5uZXJcclxuICovXHJcbnZhciBMb25nUHJvdG90eXBlID0gTG9uZy5wcm90b3R5cGU7XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhlIExvbmcgdG8gYSAzMiBiaXQgaW50ZWdlciwgYXNzdW1pbmcgaXQgaXMgYSAzMiBiaXQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiB0b0ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkID8gdGhpcy5sb3cgPj4+IDAgOiB0aGlzLmxvdztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHRoZSBuZWFyZXN0IGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdmFsdWUgKGRvdWJsZSwgNTMgYml0IG1hbnRpc3NhKS5cclxuICogQHJldHVybnMge251bWJlcn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiB0b051bWJlcigpIHtcclxuICAgIGlmICh0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiAoKHRoaXMuaGlnaCA+Pj4gMCkgKiBUV09fUFdSXzMyX0RCTCkgKyAodGhpcy5sb3cgPj4+IDApO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCAqIFRXT19QV1JfMzJfREJMICsgKHRoaXMubG93ID4+PiAwKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgTG9uZyB0byBhIHN0cmluZyB3cml0dGVuIGluIHRoZSBzcGVjaWZpZWQgcmFkaXguXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcmFkaXggUmFkaXggKDItMzYpLCBkZWZhdWx0cyB0byAxMFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gKiBAb3ZlcnJpZGVcclxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gSWYgYHJhZGl4YCBpcyBvdXQgb2YgcmFuZ2VcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhyYWRpeCkge1xyXG4gICAgcmFkaXggPSByYWRpeCB8fCAxMDtcclxuICAgIGlmIChyYWRpeCA8IDIgfHwgMzYgPCByYWRpeClcclxuICAgICAgICB0aHJvdyBSYW5nZUVycm9yKCdyYWRpeCcpO1xyXG4gICAgaWYgKHRoaXMuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuICcwJztcclxuICAgIGlmICh0aGlzLmlzTmVnYXRpdmUoKSkgeyAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hhbmdlIHRoZSBMb25nIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgbmVnYXRlZCwgc28gd2UgcmVtb3ZlXHJcbiAgICAgICAgICAgIC8vIHRoZSBib3R0b20tbW9zdCBkaWdpdCBpbiB0aGlzIGJhc2UgYW5kIHRoZW4gcmVjdXJzZSB0byBkbyB0aGUgcmVzdC5cclxuICAgICAgICAgICAgdmFyIHJhZGl4TG9uZyA9IGZyb21OdW1iZXIocmFkaXgpLFxyXG4gICAgICAgICAgICAgICAgZGl2ID0gdGhpcy5kaXYocmFkaXhMb25nKSxcclxuICAgICAgICAgICAgICAgIHJlbTEgPSBkaXYubXVsKHJhZGl4TG9uZykuc3ViKHRoaXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGl2LnRvU3RyaW5nKHJhZGl4KSArIHJlbTEudG9JbnQoKS50b1N0cmluZyhyYWRpeCk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiAnLScgKyB0aGlzLm5lZygpLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEbyBzZXZlcmFsICg2KSBkaWdpdHMgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AsIHNvIGFzIHRvXHJcbiAgICAvLyBtaW5pbWl6ZSB0aGUgY2FsbHMgdG8gdGhlIHZlcnkgZXhwZW5zaXZlIGVtdWxhdGVkIGRpdi5cclxuICAgIHZhciByYWRpeFRvUG93ZXIgPSBmcm9tTnVtYmVyKHBvd19kYmwocmFkaXgsIDYpLCB0aGlzLnVuc2lnbmVkKSxcclxuICAgICAgICByZW0gPSB0aGlzO1xyXG4gICAgdmFyIHJlc3VsdCA9ICcnO1xyXG4gICAgd2hpbGUgKHRydWUpIHtcclxuICAgICAgICB2YXIgcmVtRGl2ID0gcmVtLmRpdihyYWRpeFRvUG93ZXIpLFxyXG4gICAgICAgICAgICBpbnR2YWwgPSByZW0uc3ViKHJlbURpdi5tdWwocmFkaXhUb1Bvd2VyKSkudG9JbnQoKSA+Pj4gMCxcclxuICAgICAgICAgICAgZGlnaXRzID0gaW50dmFsLnRvU3RyaW5nKHJhZGl4KTtcclxuICAgICAgICByZW0gPSByZW1EaXY7XHJcbiAgICAgICAgaWYgKHJlbS5pc1plcm8oKSlcclxuICAgICAgICAgICAgcmV0dXJuIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2hpbGUgKGRpZ2l0cy5sZW5ndGggPCA2KVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gJzAnICsgZGlnaXRzO1xyXG4gICAgICAgICAgICByZXN1bHQgPSAnJyArIGRpZ2l0cyArIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGEgc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNpZ25lZCBoaWdoIGJpdHNcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ2V0SGlnaEJpdHMgPSBmdW5jdGlvbiBnZXRIaWdoQml0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2g7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgaGlnaCAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGhpZ2ggYml0c1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZXRIaWdoQml0c1Vuc2lnbmVkID0gZnVuY3Rpb24gZ2V0SGlnaEJpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmhpZ2ggPj4+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgbG93IDMyIGJpdHMgYXMgYSBzaWduZWQgaW50ZWdlci5cclxuICogQHJldHVybnMge251bWJlcn0gU2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHMgPSBmdW5jdGlvbiBnZXRMb3dCaXRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGxvdyAzMiBiaXRzIGFzIGFuIHVuc2lnbmVkIGludGVnZXIuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFVuc2lnbmVkIGxvdyBiaXRzXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldExvd0JpdHNVbnNpZ25lZCA9IGZ1bmN0aW9uIGdldExvd0JpdHNVbnNpZ25lZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmxvdyA+Pj4gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdldE51bUJpdHNBYnMgPSBmdW5jdGlvbiBnZXROdW1CaXRzQWJzKCkge1xyXG4gICAgaWYgKHRoaXMuaXNOZWdhdGl2ZSgpKSAvLyBVbnNpZ25lZCBMb25ncyBhcmUgbmV2ZXIgbmVnYXRpdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5lcShNSU5fVkFMVUUpID8gNjQgOiB0aGlzLm5lZygpLmdldE51bUJpdHNBYnMoKTtcclxuICAgIHZhciB2YWwgPSB0aGlzLmhpZ2ggIT0gMCA/IHRoaXMuaGlnaCA6IHRoaXMubG93O1xyXG4gICAgZm9yICh2YXIgYml0ID0gMzE7IGJpdCA+IDA7IGJpdC0tKVxyXG4gICAgICAgIGlmICgodmFsICYgKDEgPDwgYml0KSkgIT0gMClcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoICE9IDAgPyBiaXQgKyAzMyA6IGJpdCArIDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZXF1YWxzIHplcm8uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiBpc1plcm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdoID09PSAwICYmIHRoaXMubG93ID09PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB6ZXJvLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2lzWmVyb30uXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXogPSBMb25nUHJvdG90eXBlLmlzWmVybztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBuZWdhdGl2ZS5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzTmVnYXRpdmUgPSBmdW5jdGlvbiBpc05lZ2F0aXZlKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnVuc2lnbmVkICYmIHRoaXMuaGlnaCA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgcG9zaXRpdmUuXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5pc1Bvc2l0aXZlID0gZnVuY3Rpb24gaXNQb3NpdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnVuc2lnbmVkIHx8IHRoaXMuaGlnaCA+PSAwO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIG9kZC5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzT2RkID0gZnVuY3Rpb24gaXNPZGQoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubG93ICYgMSkgPT09IDE7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZXZlbi5cclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmlzRXZlbiA9IGZ1bmN0aW9uIGlzRXZlbigpIHtcclxuICAgIHJldHVybiAodGhpcy5sb3cgJiAxKSA9PT0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBlcXVhbHMgdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZCAhPT0gb3RoZXIudW5zaWduZWQgJiYgKHRoaXMuaGlnaCA+Pj4gMzEpID09PSAxICYmIChvdGhlci5oaWdoID4+PiAzMSkgPT09IDEpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaCA9PT0gb3RoZXIuaGlnaCAmJiB0aGlzLmxvdyA9PT0gb3RoZXIubG93O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGVxdWFscyB0aGUgc3BlY2lmaWVkJ3MuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZXF1YWxzfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmVxID0gTG9uZ1Byb3RvdHlwZS5lcXVhbHM7XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90RXF1YWxzID0gZnVuY3Rpb24gbm90RXF1YWxzKG90aGVyKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuZXEoLyogdmFsaWRhdGVzICovIG90aGVyKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZXEgPSBMb25nUHJvdG90eXBlLm5vdEVxdWFscztcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25vdEVxdWFsc30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZSA9IExvbmdQcm90b3R5cGUubm90RXF1YWxzO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmxlc3NUaGFuID0gZnVuY3Rpb24gbGVzc1RoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA8IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNsZXNzVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdCA9IExvbmdQcm90b3R5cGUubGVzc1RoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsID0gZnVuY3Rpb24gbGVzc1RoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPD0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sdGUgPSBMb25nUHJvdG90eXBlLmxlc3NUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2xlc3NUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5sZSA9IExvbmdQcm90b3R5cGUubGVzc1RoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIFRlc3RzIGlmIHRoaXMgTG9uZydzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkJ3MuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgdmFsdWVcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuID0gZnVuY3Rpb24gZ3JlYXRlclRoYW4ob3RoZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXAoLyogdmFsaWRhdGVzICovIG90aGVyKSA+IDA7XHJcbn07XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQncy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNncmVhdGVyVGhhbn0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndCA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW47XHJcblxyXG4vKipcclxuICogVGVzdHMgaWYgdGhpcyBMb25nJ3MgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRoZSBzcGVjaWZpZWQncy5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsID0gZnVuY3Rpb24gZ3JlYXRlclRoYW5PckVxdWFsKG90aGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wKC8qIHZhbGlkYXRlcyAqLyBvdGhlcikgPj0gMDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5ndGUgPSBMb25nUHJvdG90eXBlLmdyZWF0ZXJUaGFuT3JFcXVhbDtcclxuXHJcbi8qKlxyXG4gKiBUZXN0cyBpZiB0aGlzIExvbmcncyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2dyZWF0ZXJUaGFuT3JFcXVhbH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5nZSA9IExvbmdQcm90b3R5cGUuZ3JlYXRlclRoYW5PckVxdWFsO1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIHZhbHVlXHJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IDAgaWYgdGhleSBhcmUgdGhlIHNhbWUsIDEgaWYgdGhlIHRoaXMgaXMgZ3JlYXRlciBhbmQgLTFcclxuICogIGlmIHRoZSBnaXZlbiBvbmUgaXMgZ3JlYXRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIGlmICh0aGlzLmVxKG90aGVyKSlcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIHZhciB0aGlzTmVnID0gdGhpcy5pc05lZ2F0aXZlKCksXHJcbiAgICAgICAgb3RoZXJOZWcgPSBvdGhlci5pc05lZ2F0aXZlKCk7XHJcbiAgICBpZiAodGhpc05lZyAmJiAhb3RoZXJOZWcpXHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgaWYgKCF0aGlzTmVnICYmIG90aGVyTmVnKVxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2lnbiBiaXRzIGFyZSB0aGUgc2FtZVxyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnN1YihvdGhlcikuaXNOZWdhdGl2ZSgpID8gLTEgOiAxO1xyXG4gICAgLy8gQm90aCBhcmUgcG9zaXRpdmUgaWYgYXQgbGVhc3Qgb25lIGlzIHVuc2lnbmVkXHJcbiAgICByZXR1cm4gKG90aGVyLmhpZ2ggPj4+IDApID4gKHRoaXMuaGlnaCA+Pj4gMCkgfHwgKG90aGVyLmhpZ2ggPT09IHRoaXMuaGlnaCAmJiAob3RoZXIubG93ID4+PiAwKSA+ICh0aGlzLmxvdyA+Pj4gMCkpID8gLTEgOiAxO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXBhcmVzIHRoaXMgTG9uZydzIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCdzLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI2NvbXBhcmV9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBvdGhlciBPdGhlciB2YWx1ZVxyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCAxIGlmIHRoZSB0aGlzIGlzIGdyZWF0ZXIgYW5kIC0xXHJcbiAqICBpZiB0aGUgZ2l2ZW4gb25lIGlzIGdyZWF0ZXJcclxuICovXHJcbkxvbmdQcm90b3R5cGUuY29tcCA9IExvbmdQcm90b3R5cGUuY29tcGFyZTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWdhdGUgPSBmdW5jdGlvbiBuZWdhdGUoKSB7XHJcbiAgICBpZiAoIXRoaXMudW5zaWduZWQgJiYgdGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBNSU5fVkFMVUU7XHJcbiAgICByZXR1cm4gdGhpcy5ub3QoKS5hZGQoT05FKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBOZWdhdGVzIHRoaXMgTG9uZydzIHZhbHVlLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI25lZ2F0ZX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IE5lZ2F0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5uZWcgPSBMb25nUHJvdG90eXBlLm5lZ2F0ZTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzdW0gb2YgdGhpcyBhbmQgdGhlIHNwZWNpZmllZCBMb25nLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGFkZGVuZCBBZGRlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBTdW1cclxuICovXHJcbkxvbmdQcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkKGFkZGVuZCkge1xyXG4gICAgaWYgKCFpc0xvbmcoYWRkZW5kKSlcclxuICAgICAgICBhZGRlbmQgPSBmcm9tVmFsdWUoYWRkZW5kKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBudW1iZXIgaW50byA0IGNodW5rcyBvZiAxNiBiaXRzLCBhbmQgdGhlbiBzdW0gdGhlIGNodW5rcy5cclxuXHJcbiAgICB2YXIgYTQ4ID0gdGhpcy5oaWdoID4+PiAxNjtcclxuICAgIHZhciBhMzIgPSB0aGlzLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYTE2ID0gdGhpcy5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGEwMCA9IHRoaXMubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBiNDggPSBhZGRlbmQuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYjMyID0gYWRkZW5kLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gYWRkZW5kLmxvdyA+Pj4gMTY7XHJcbiAgICB2YXIgYjAwID0gYWRkZW5kLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYzQ4ID0gMCwgYzMyID0gMCwgYzE2ID0gMCwgYzAwID0gMDtcclxuICAgIGMwMCArPSBhMDAgKyBiMDA7XHJcbiAgICBjMTYgKz0gYzAwID4+PiAxNjtcclxuICAgIGMwMCAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTE2ICsgYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiArIGIzMjtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGM0OCArPSBhNDggKyBiNDg7XHJcbiAgICBjNDggJj0gMHhGRkZGO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKChjMTYgPDwgMTYpIHwgYzAwLCAoYzQ4IDw8IDE2KSB8IGMzMiwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gc3VidHJhaGVuZCBTdWJ0cmFoZW5kXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gRGlmZmVyZW5jZVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zdWJ0cmFjdCA9IGZ1bmN0aW9uIHN1YnRyYWN0KHN1YnRyYWhlbmQpIHtcclxuICAgIGlmICghaXNMb25nKHN1YnRyYWhlbmQpKVxyXG4gICAgICAgIHN1YnRyYWhlbmQgPSBmcm9tVmFsdWUoc3VidHJhaGVuZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hZGQoc3VidHJhaGVuZC5uZWcoKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjc3VidHJhY3R9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBzdWJ0cmFoZW5kIFN1YnRyYWhlbmRcclxuICogQHJldHVybnMgeyFMb25nfSBEaWZmZXJlbmNlXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnN1YiA9IExvbmdQcm90b3R5cGUuc3VidHJhY3Q7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcHJvZHVjdCBvZiB0aGlzIGFuZCB0aGUgc3BlY2lmaWVkIExvbmcuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gbXVsdGlwbGllciBNdWx0aXBsaWVyXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUHJvZHVjdFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIG11bHRpcGx5KG11bHRpcGxpZXIpIHtcclxuICAgIGlmICh0aGlzLmlzWmVybygpKVxyXG4gICAgICAgIHJldHVybiBaRVJPO1xyXG4gICAgaWYgKCFpc0xvbmcobXVsdGlwbGllcikpXHJcbiAgICAgICAgbXVsdGlwbGllciA9IGZyb21WYWx1ZShtdWx0aXBsaWVyKTtcclxuXHJcbiAgICAvLyB1c2Ugd2FzbSBzdXBwb3J0IGlmIHByZXNlbnRcclxuICAgIGlmICh3YXNtKSB7XHJcbiAgICAgICAgdmFyIGxvdyA9IHdhc20ubXVsKHRoaXMubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIubG93LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyLmhpZ2gpO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG11bHRpcGxpZXIuaXNaZXJvKCkpXHJcbiAgICAgICAgcmV0dXJuIFpFUk87XHJcbiAgICBpZiAodGhpcy5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgIHJldHVybiBtdWx0aXBsaWVyLmlzT2RkKCkgPyBNSU5fVkFMVUUgOiBaRVJPO1xyXG4gICAgaWYgKG11bHRpcGxpZXIuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICByZXR1cm4gdGhpcy5pc09kZCgpID8gTUlOX1ZBTFVFIDogWkVSTztcclxuXHJcbiAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyLm5lZygpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5lZygpLm11bChtdWx0aXBsaWVyKS5uZWcoKTtcclxuICAgIH0gZWxzZSBpZiAobXVsdGlwbGllci5pc05lZ2F0aXZlKCkpXHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsKG11bHRpcGxpZXIubmVnKCkpLm5lZygpO1xyXG5cclxuICAgIC8vIElmIGJvdGggbG9uZ3MgYXJlIHNtYWxsLCB1c2UgZmxvYXQgbXVsdGlwbGljYXRpb25cclxuICAgIGlmICh0aGlzLmx0KFRXT19QV1JfMjQpICYmIG11bHRpcGxpZXIubHQoVFdPX1BXUl8yNCkpXHJcbiAgICAgICAgcmV0dXJuIGZyb21OdW1iZXIodGhpcy50b051bWJlcigpICogbXVsdGlwbGllci50b051bWJlcigpLCB0aGlzLnVuc2lnbmVkKTtcclxuXHJcbiAgICAvLyBEaXZpZGUgZWFjaCBsb25nIGludG8gNCBjaHVua3Mgb2YgMTYgYml0cywgYW5kIHRoZW4gYWRkIHVwIDR4NCBwcm9kdWN0cy5cclxuICAgIC8vIFdlIGNhbiBza2lwIHByb2R1Y3RzIHRoYXQgd291bGQgb3ZlcmZsb3cuXHJcblxyXG4gICAgdmFyIGE0OCA9IHRoaXMuaGlnaCA+Pj4gMTY7XHJcbiAgICB2YXIgYTMyID0gdGhpcy5oaWdoICYgMHhGRkZGO1xyXG4gICAgdmFyIGExNiA9IHRoaXMubG93ID4+PiAxNjtcclxuICAgIHZhciBhMDAgPSB0aGlzLmxvdyAmIDB4RkZGRjtcclxuXHJcbiAgICB2YXIgYjQ4ID0gbXVsdGlwbGllci5oaWdoID4+PiAxNjtcclxuICAgIHZhciBiMzIgPSBtdWx0aXBsaWVyLmhpZ2ggJiAweEZGRkY7XHJcbiAgICB2YXIgYjE2ID0gbXVsdGlwbGllci5sb3cgPj4+IDE2O1xyXG4gICAgdmFyIGIwMCA9IG11bHRpcGxpZXIubG93ICYgMHhGRkZGO1xyXG5cclxuICAgIHZhciBjNDggPSAwLCBjMzIgPSAwLCBjMTYgPSAwLCBjMDAgPSAwO1xyXG4gICAgYzAwICs9IGEwMCAqIGIwMDtcclxuICAgIGMxNiArPSBjMDAgPj4+IDE2O1xyXG4gICAgYzAwICY9IDB4RkZGRjtcclxuICAgIGMxNiArPSBhMTYgKiBiMDA7XHJcbiAgICBjMzIgKz0gYzE2ID4+PiAxNjtcclxuICAgIGMxNiAmPSAweEZGRkY7XHJcbiAgICBjMTYgKz0gYTAwICogYjE2O1xyXG4gICAgYzMyICs9IGMxNiA+Pj4gMTY7XHJcbiAgICBjMTYgJj0gMHhGRkZGO1xyXG4gICAgYzMyICs9IGEzMiAqIGIwMDtcclxuICAgIGM0OCArPSBjMzIgPj4+IDE2O1xyXG4gICAgYzMyICY9IDB4RkZGRjtcclxuICAgIGMzMiArPSBhMTYgKiBiMTY7XHJcbiAgICBjNDggKz0gYzMyID4+PiAxNjtcclxuICAgIGMzMiAmPSAweEZGRkY7XHJcbiAgICBjMzIgKz0gYTAwICogYjMyO1xyXG4gICAgYzQ4ICs9IGMzMiA+Pj4gMTY7XHJcbiAgICBjMzIgJj0gMHhGRkZGO1xyXG4gICAgYzQ4ICs9IGE0OCAqIGIwMCArIGEzMiAqIGIxNiArIGExNiAqIGIzMiArIGEwMCAqIGI0ODtcclxuICAgIGM0OCAmPSAweEZGRkY7XHJcbiAgICByZXR1cm4gZnJvbUJpdHMoKGMxNiA8PCAxNikgfCBjMDAsIChjNDggPDwgMTYpIHwgYzMyLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoaXMgYW5kIHRoZSBzcGVjaWZpZWQgTG9uZy4gVGhpcyBpcyBhbiBhbGlhcyBvZiB7QGxpbmsgTG9uZyNtdWx0aXBseX0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG11bHRpcGxpZXIgTXVsdGlwbGllclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFByb2R1Y3RcclxuICovXHJcbkxvbmdQcm90b3R5cGUubXVsID0gTG9uZ1Byb3RvdHlwZS5tdWx0aXBseTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoZSByZXN1bHQgaXMgc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyBzaWduZWQgb3JcclxuICogIHVuc2lnbmVkIGlmIHRoaXMgTG9uZyBpcyB1bnNpZ25lZC5cclxuICogQHBhcmFtIHshTG9uZ3xudW1iZXJ8c3RyaW5nfSBkaXZpc29yIERpdmlzb3JcclxuICogQHJldHVybnMgeyFMb25nfSBRdW90aWVudFxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5kaXZpZGUgPSBmdW5jdGlvbiBkaXZpZGUoZGl2aXNvcikge1xyXG4gICAgaWYgKCFpc0xvbmcoZGl2aXNvcikpXHJcbiAgICAgICAgZGl2aXNvciA9IGZyb21WYWx1ZShkaXZpc29yKTtcclxuICAgIGlmIChkaXZpc29yLmlzWmVybygpKVxyXG4gICAgICAgIHRocm93IEVycm9yKCdkaXZpc2lvbiBieSB6ZXJvJyk7XHJcblxyXG4gICAgLy8gdXNlIHdhc20gc3VwcG9ydCBpZiBwcmVzZW50XHJcbiAgICBpZiAod2FzbSkge1xyXG4gICAgICAgIC8vIGd1YXJkIGFnYWluc3Qgc2lnbmVkIGRpdmlzaW9uIG92ZXJmbG93OiB0aGUgbGFyZ2VzdFxyXG4gICAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciAvIC0xIHdvdWxkIGJlIDEgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3RcclxuICAgICAgICAvLyBwb3NpdGl2ZSBudW1iZXIsIGR1ZSB0byB0d28ncyBjb21wbGVtZW50LlxyXG4gICAgICAgIGlmICghdGhpcy51bnNpZ25lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmhpZ2ggPT09IC0weDgwMDAwMDAwICYmXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93ID09PSAtMSAmJiBkaXZpc29yLmhpZ2ggPT09IC0xKSB7XHJcbiAgICAgICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgd2l0aCBub24td2FzbSBjb2RlIHBhdGhcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBsb3cgPSAodGhpcy51bnNpZ25lZCA/IHdhc20uZGl2X3UgOiB3YXNtLmRpdl9zKShcclxuICAgICAgICAgICAgdGhpcy5sb3csXHJcbiAgICAgICAgICAgIHRoaXMuaGlnaCxcclxuICAgICAgICAgICAgZGl2aXNvci5sb3csXHJcbiAgICAgICAgICAgIGRpdmlzb3IuaGlnaFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKGxvdywgd2FzbS5nZXRfaGlnaCgpLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc1plcm8oKSlcclxuICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgIHZhciBhcHByb3gsIHJlbSwgcmVzO1xyXG4gICAgaWYgKCF0aGlzLnVuc2lnbmVkKSB7XHJcbiAgICAgICAgLy8gVGhpcyBzZWN0aW9uIGlzIG9ubHkgcmVsZXZhbnQgZm9yIHNpZ25lZCBsb25ncyBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZVxyXG4gICAgICAgIC8vIGNsb3N1cmUgbGlicmFyeSBhcyBhIHdob2xlLlxyXG4gICAgICAgIGlmICh0aGlzLmVxKE1JTl9WQUxVRSkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuZXEoT05FKSB8fCBkaXZpc29yLmVxKE5FR19PTkUpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1JTl9WQUxVRTsgIC8vIHJlY2FsbCB0aGF0IC1NSU5fVkFMVUUgPT0gTUlOX1ZBTFVFXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRpdmlzb3IuZXEoTUlOX1ZBTFVFKSlcclxuICAgICAgICAgICAgICAgIHJldHVybiBPTkU7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB8b3RoZXJ8ID49IDIsIHNvIHx0aGlzL290aGVyfCA8IHxNSU5fVkFMVUV8LlxyXG4gICAgICAgICAgICAgICAgdmFyIGhhbGZUaGlzID0gdGhpcy5zaHIoMSk7XHJcbiAgICAgICAgICAgICAgICBhcHByb3ggPSBoYWxmVGhpcy5kaXYoZGl2aXNvcikuc2hsKDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcHJveC5lcShaRVJPKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkaXZpc29yLmlzTmVnYXRpdmUoKSA/IE9ORSA6IE5FR19PTkU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbSA9IHRoaXMuc3ViKGRpdmlzb3IubXVsKGFwcHJveCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9IGFwcHJveC5hZGQocmVtLmRpdihkaXZpc29yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5lcShNSU5fVkFMVUUpKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bnNpZ25lZCA/IFVaRVJPIDogWkVSTztcclxuICAgICAgICBpZiAodGhpcy5pc05lZ2F0aXZlKCkpIHtcclxuICAgICAgICAgICAgaWYgKGRpdmlzb3IuaXNOZWdhdGl2ZSgpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmVnKCkuZGl2KGRpdmlzb3IubmVnKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZWcoKS5kaXYoZGl2aXNvcikubmVnKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUoKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGl2KGRpdmlzb3IubmVnKCkpLm5lZygpO1xyXG4gICAgICAgIHJlcyA9IFpFUk87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFRoZSBhbGdvcml0aG0gYmVsb3cgaGFzIG5vdCBiZWVuIG1hZGUgZm9yIHVuc2lnbmVkIGxvbmdzLiBJdCdzIHRoZXJlZm9yZVxyXG4gICAgICAgIC8vIHJlcXVpcmVkIHRvIHRha2Ugc3BlY2lhbCBjYXJlIG9mIHRoZSBNU0IgcHJpb3IgdG8gcnVubmluZyBpdC5cclxuICAgICAgICBpZiAoIWRpdmlzb3IudW5zaWduZWQpXHJcbiAgICAgICAgICAgIGRpdmlzb3IgPSBkaXZpc29yLnRvVW5zaWduZWQoKTtcclxuICAgICAgICBpZiAoZGl2aXNvci5ndCh0aGlzKSlcclxuICAgICAgICAgICAgcmV0dXJuIFVaRVJPO1xyXG4gICAgICAgIGlmIChkaXZpc29yLmd0KHRoaXMuc2hydSgxKSkpIC8vIDE1ID4+PiAxID0gNyA7IHdpdGggZGl2aXNvciA9IDggOyB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBVT05FO1xyXG4gICAgICAgIHJlcyA9IFVaRVJPO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlcGVhdCB0aGUgZm9sbG93aW5nIHVudGlsIHRoZSByZW1haW5kZXIgaXMgbGVzcyB0aGFuIG90aGVyOiAgZmluZCBhXHJcbiAgICAvLyBmbG9hdGluZy1wb2ludCB0aGF0IGFwcHJveGltYXRlcyByZW1haW5kZXIgLyBvdGhlciAqZnJvbSBiZWxvdyosIGFkZCB0aGlzXHJcbiAgICAvLyBpbnRvIHRoZSByZXN1bHQsIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSByZW1haW5kZXIuICBJdCBpcyBjcml0aWNhbCB0aGF0XHJcbiAgICAvLyB0aGUgYXBwcm94aW1hdGUgdmFsdWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZWFsIHZhbHVlIHNvIHRoYXQgdGhlXHJcbiAgICAvLyByZW1haW5kZXIgbmV2ZXIgYmVjb21lcyBuZWdhdGl2ZS5cclxuICAgIHJlbSA9IHRoaXM7XHJcbiAgICB3aGlsZSAocmVtLmd0ZShkaXZpc29yKSkge1xyXG4gICAgICAgIC8vIEFwcHJveGltYXRlIHRoZSByZXN1bHQgb2YgZGl2aXNpb24uIFRoaXMgbWF5IGJlIGEgbGl0dGxlIGdyZWF0ZXIgb3JcclxuICAgICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGFjdHVhbCB2YWx1ZS5cclxuICAgICAgICBhcHByb3ggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHJlbS50b051bWJlcigpIC8gZGl2aXNvci50b051bWJlcigpKSk7XHJcblxyXG4gICAgICAgIC8vIFdlIHdpbGwgdHdlYWsgdGhlIGFwcHJveGltYXRlIHJlc3VsdCBieSBjaGFuZ2luZyBpdCBpbiB0aGUgNDgtdGggZGlnaXQgb3JcclxuICAgICAgICAvLyB0aGUgc21hbGxlc3Qgbm9uLWZyYWN0aW9uYWwgZGlnaXQsIHdoaWNoZXZlciBpcyBsYXJnZXIuXHJcbiAgICAgICAgdmFyIGxvZzIgPSBNYXRoLmNlaWwoTWF0aC5sb2coYXBwcm94KSAvIE1hdGguTE4yKSxcclxuICAgICAgICAgICAgZGVsdGEgPSAobG9nMiA8PSA0OCkgPyAxIDogcG93X2RibCgyLCBsb2cyIC0gNDgpLFxyXG5cclxuICAgICAgICAvLyBEZWNyZWFzZSB0aGUgYXBwcm94aW1hdGlvbiB1bnRpbCBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlbWFpbmRlci4gIE5vdGVcclxuICAgICAgICAvLyB0aGF0IGlmIGl0IGlzIHRvbyBsYXJnZSwgdGhlIHByb2R1Y3Qgb3ZlcmZsb3dzIGFuZCBpcyBuZWdhdGl2ZS5cclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gpLFxyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIHdoaWxlIChhcHByb3hSZW0uaXNOZWdhdGl2ZSgpIHx8IGFwcHJveFJlbS5ndChyZW0pKSB7XHJcbiAgICAgICAgICAgIGFwcHJveCAtPSBkZWx0YTtcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gZnJvbU51bWJlcihhcHByb3gsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgICAgICBhcHByb3hSZW0gPSBhcHByb3hSZXMubXVsKGRpdmlzb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5zd2VyIGNhbid0IGJlIHplcm8uLi4gYW5kIGFjdHVhbGx5LCB6ZXJvIHdvdWxkIGNhdXNlXHJcbiAgICAgICAgLy8gaW5maW5pdGUgcmVjdXJzaW9uIHNpbmNlIHdlIHdvdWxkIG1ha2Ugbm8gcHJvZ3Jlc3MuXHJcbiAgICAgICAgaWYgKGFwcHJveFJlcy5pc1plcm8oKSlcclxuICAgICAgICAgICAgYXBwcm94UmVzID0gT05FO1xyXG5cclxuICAgICAgICByZXMgPSByZXMuYWRkKGFwcHJveFJlcyk7XHJcbiAgICAgICAgcmVtID0gcmVtLnN1YihhcHByb3hSZW0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyBkaXZpZGVkIGJ5IHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjZGl2aWRlfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUXVvdGllbnRcclxuICovXHJcbkxvbmdQcm90b3R5cGUuZGl2ID0gTG9uZ1Byb3RvdHlwZS5kaXZpZGU7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZHVsbyA9IGZ1bmN0aW9uIG1vZHVsbyhkaXZpc29yKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhkaXZpc29yKSlcclxuICAgICAgICBkaXZpc29yID0gZnJvbVZhbHVlKGRpdmlzb3IpO1xyXG5cclxuICAgIC8vIHVzZSB3YXNtIHN1cHBvcnQgaWYgcHJlc2VudFxyXG4gICAgaWYgKHdhc20pIHtcclxuICAgICAgICB2YXIgbG93ID0gKHRoaXMudW5zaWduZWQgPyB3YXNtLnJlbV91IDogd2FzbS5yZW1fcykoXHJcbiAgICAgICAgICAgIHRoaXMubG93LFxyXG4gICAgICAgICAgICB0aGlzLmhpZ2gsXHJcbiAgICAgICAgICAgIGRpdmlzb3IubG93LFxyXG4gICAgICAgICAgICBkaXZpc29yLmhpZ2hcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmcm9tQml0cyhsb3csIHdhc20uZ2V0X2hpZ2goKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc3ViKHRoaXMuZGl2KGRpdmlzb3IpLm11bChkaXZpc29yKSk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgbW9kdWxvIHRoZSBzcGVjaWZpZWQuIFRoaXMgaXMgYW4gYWxpYXMgb2Yge0BsaW5rIExvbmcjbW9kdWxvfS5cclxuICogQGZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gZGl2aXNvciBEaXZpc29yXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gUmVtYWluZGVyXHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLm1vZCA9IExvbmdQcm90b3R5cGUubW9kdWxvO1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIG1vZHVsbyB0aGUgc3BlY2lmaWVkLiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI21vZHVsb30uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IGRpdmlzb3IgRGl2aXNvclxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFJlbWFpbmRlclxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5yZW0gPSBMb25nUHJvdG90eXBlLm1vZHVsbztcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIE5PVCBvZiB0aGlzIExvbmcuXHJcbiAqIEByZXR1cm5zIHshTG9uZ31cclxuICovXHJcbkxvbmdQcm90b3R5cGUubm90ID0gZnVuY3Rpb24gbm90KCkge1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKH50aGlzLmxvdywgfnRoaXMuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgYml0d2lzZSBBTkQgb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiBhbmQob3RoZXIpIHtcclxuICAgIGlmICghaXNMb25nKG90aGVyKSlcclxuICAgICAgICBvdGhlciA9IGZyb21WYWx1ZShvdGhlcik7XHJcbiAgICByZXR1cm4gZnJvbUJpdHModGhpcy5sb3cgJiBvdGhlci5sb3csIHRoaXMuaGlnaCAmIG90aGVyLmhpZ2gsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGJpdHdpc2UgT1Igb2YgdGhpcyBMb25nIGFuZCB0aGUgc3BlY2lmaWVkLlxyXG4gKiBAcGFyYW0geyFMb25nfG51bWJlcnxzdHJpbmd9IG90aGVyIE90aGVyIExvbmdcclxuICogQHJldHVybnMgeyFMb25nfVxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5vciA9IGZ1bmN0aW9uIG9yKG90aGVyKSB7XHJcbiAgICBpZiAoIWlzTG9uZyhvdGhlcikpXHJcbiAgICAgICAgb3RoZXIgPSBmcm9tVmFsdWUob3RoZXIpO1xyXG4gICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IHwgb3RoZXIubG93LCB0aGlzLmhpZ2ggfCBvdGhlci5oaWdoLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBiaXR3aXNlIFhPUiBvZiB0aGlzIExvbmcgYW5kIHRoZSBnaXZlbiBvbmUuXHJcbiAqIEBwYXJhbSB7IUxvbmd8bnVtYmVyfHN0cmluZ30gb3RoZXIgT3RoZXIgTG9uZ1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9XHJcbiAqL1xyXG5Mb25nUHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uIHhvcihvdGhlcikge1xyXG4gICAgaWYgKCFpc0xvbmcob3RoZXIpKVxyXG4gICAgICAgIG90aGVyID0gZnJvbVZhbHVlKG90aGVyKTtcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdyBeIG90aGVyLmxvdywgdGhpcy5oaWdoIF4gb3RoZXIuaGlnaCwgdGhpcy51bnNpZ25lZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIHNoaWZ0ZWQgdG8gdGhlIGxlZnQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRMZWZ0ID0gZnVuY3Rpb24gc2hpZnRMZWZ0KG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIGlmICgobnVtQml0cyAmPSA2MykgPT09IDApXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICBlbHNlIGlmIChudW1CaXRzIDwgMzIpXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMubG93IDw8IG51bUJpdHMsICh0aGlzLmhpZ2ggPDwgbnVtQml0cykgfCAodGhpcy5sb3cgPj4+ICgzMiAtIG51bUJpdHMpKSwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKDAsIHRoaXMubG93IDw8IChudW1CaXRzIC0gMzIpLCB0aGlzLnVuc2lnbmVkKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgc2hpZnRlZCB0byB0aGUgbGVmdCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0TGVmdH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaGwgPSBMb25nUHJvdG90eXBlLnNoaWZ0TGVmdDtcclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoaXMgTG9uZyB3aXRoIGJpdHMgYXJpdGhtZXRpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodCA9IGZ1bmN0aW9uIHNoaWZ0UmlnaHQobnVtQml0cykge1xyXG4gICAgaWYgKGlzTG9uZyhudW1CaXRzKSlcclxuICAgICAgICBudW1CaXRzID0gbnVtQml0cy50b0ludCgpO1xyXG4gICAgaWYgKChudW1CaXRzICY9IDYzKSA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2UgaWYgKG51bUJpdHMgPCAzMilcclxuICAgICAgICByZXR1cm4gZnJvbUJpdHMoKHRoaXMubG93ID4+PiBudW1CaXRzKSB8ICh0aGlzLmhpZ2ggPDwgKDMyIC0gbnVtQml0cykpLCB0aGlzLmhpZ2ggPj4gbnVtQml0cywgdGhpcy51bnNpZ25lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIGZyb21CaXRzKHRoaXMuaGlnaCA+PiAobnVtQml0cyAtIDMyKSwgdGhpcy5oaWdoID49IDAgPyAwIDogLTEsIHRoaXMudW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBhcml0aG1ldGljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHR9LlxyXG4gKiBAZnVuY3Rpb25cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hyID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhpcyBMb25nIHdpdGggYml0cyBsb2dpY2FsbHkgc2hpZnRlZCB0byB0aGUgcmlnaHQgYnkgdGhlIGdpdmVuIGFtb3VudC5cclxuICogQHBhcmFtIHtudW1iZXJ8IUxvbmd9IG51bUJpdHMgTnVtYmVyIG9mIGJpdHNcclxuICogQHJldHVybnMgeyFMb25nfSBTaGlmdGVkIExvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkID0gZnVuY3Rpb24gc2hpZnRSaWdodFVuc2lnbmVkKG51bUJpdHMpIHtcclxuICAgIGlmIChpc0xvbmcobnVtQml0cykpXHJcbiAgICAgICAgbnVtQml0cyA9IG51bUJpdHMudG9JbnQoKTtcclxuICAgIG51bUJpdHMgJj0gNjM7XHJcbiAgICBpZiAobnVtQml0cyA9PT0gMClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHZhciBoaWdoID0gdGhpcy5oaWdoO1xyXG4gICAgICAgIGlmIChudW1CaXRzIDwgMzIpIHtcclxuICAgICAgICAgICAgdmFyIGxvdyA9IHRoaXMubG93O1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbUJpdHMoKGxvdyA+Pj4gbnVtQml0cykgfCAoaGlnaCA8PCAoMzIgLSBudW1CaXRzKSksIGhpZ2ggPj4+IG51bUJpdHMsIHRoaXMudW5zaWduZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobnVtQml0cyA9PT0gMzIpXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoLCAwLCB0aGlzLnVuc2lnbmVkKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tQml0cyhoaWdoID4+PiAobnVtQml0cyAtIDMyKSwgMCwgdGhpcy51bnNpZ25lZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJ1ID0gTG9uZ1Byb3RvdHlwZS5zaGlmdFJpZ2h0VW5zaWduZWQ7XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGlzIExvbmcgd2l0aCBiaXRzIGxvZ2ljYWxseSBzaGlmdGVkIHRvIHRoZSByaWdodCBieSB0aGUgZ2l2ZW4gYW1vdW50LiBUaGlzIGlzIGFuIGFsaWFzIG9mIHtAbGluayBMb25nI3NoaWZ0UmlnaHRVbnNpZ25lZH0uXHJcbiAqIEBmdW5jdGlvblxyXG4gKiBAcGFyYW0ge251bWJlcnwhTG9uZ30gbnVtQml0cyBOdW1iZXIgb2YgYml0c1xyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFNoaWZ0ZWQgTG9uZ1xyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS5zaHJfdSA9IExvbmdQcm90b3R5cGUuc2hpZnRSaWdodFVuc2lnbmVkO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIHRoaXMgTG9uZyB0byBzaWduZWQuXHJcbiAqIEByZXR1cm5zIHshTG9uZ30gU2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9TaWduZWQgPSBmdW5jdGlvbiB0b1NpZ25lZCgpIHtcclxuICAgIGlmICghdGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIHVuc2lnbmVkLlxyXG4gKiBAcmV0dXJucyB7IUxvbmd9IFVuc2lnbmVkIGxvbmdcclxuICovXHJcbkxvbmdQcm90b3R5cGUudG9VbnNpZ25lZCA9IGZ1bmN0aW9uIHRvVW5zaWduZWQoKSB7XHJcbiAgICBpZiAodGhpcy51bnNpZ25lZClcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIHJldHVybiBmcm9tQml0cyh0aGlzLmxvdywgdGhpcy5oaWdoLCB0cnVlKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGlzIExvbmcgdG8gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGxlIFdoZXRoZXIgbGl0dGxlIG9yIGJpZyBlbmRpYW4sIGRlZmF1bHRzIHRvIGJpZyBlbmRpYW5cclxuICogQHJldHVybnMgeyFBcnJheS48bnVtYmVyPn0gQnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzID0gZnVuY3Rpb24gdG9CeXRlcyhsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gdGhpcy50b0J5dGVzTEUoKSA6IHRoaXMudG9CeXRlc0JFKCk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBsaXR0bGUgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzTEUgPSBmdW5jdGlvbiB0b0J5dGVzTEUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgbG8gICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gIDggJiAweGZmLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSAgICAgICAgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgPj4+IDE2ICYgMHhmZixcclxuICAgICAgICBoaSA+Pj4gMjRcclxuICAgIF07XHJcbn07XHJcblxyXG4vKipcclxuICogQ29udmVydHMgdGhpcyBMb25nIHRvIGl0cyBiaWcgZW5kaWFuIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEByZXR1cm5zIHshQXJyYXkuPG51bWJlcj59IEJpZyBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKi9cclxuTG9uZ1Byb3RvdHlwZS50b0J5dGVzQkUgPSBmdW5jdGlvbiB0b0J5dGVzQkUoKSB7XHJcbiAgICB2YXIgaGkgPSB0aGlzLmhpZ2gsXHJcbiAgICAgICAgbG8gPSB0aGlzLmxvdztcclxuICAgIHJldHVybiBbXHJcbiAgICAgICAgaGkgPj4+IDI0ICAgICAgICxcclxuICAgICAgICBoaSA+Pj4gMTYgJiAweGZmLFxyXG4gICAgICAgIGhpID4+PiAgOCAmIDB4ZmYsXHJcbiAgICAgICAgaGkgICAgICAgICYgMHhmZixcclxuICAgICAgICBsbyA+Pj4gMjQgICAgICAgLFxyXG4gICAgICAgIGxvID4+PiAxNiAmIDB4ZmYsXHJcbiAgICAgICAgbG8gPj4+ICA4ICYgMHhmZixcclxuICAgICAgICBsbyAgICAgICAgJiAweGZmXHJcbiAgICBdO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGJ5dGUgcmVwcmVzZW50YXRpb24uXHJcbiAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBieXRlcyBCeXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHBhcmFtIHtib29sZWFuPX0gbGUgV2hldGhlciBsaXR0bGUgb3IgYmlnIGVuZGlhbiwgZGVmYXVsdHMgdG8gYmlnIGVuZGlhblxyXG4gKiBAcmV0dXJucyB7TG9uZ30gVGhlIGNvcnJlc3BvbmRpbmcgTG9uZyB2YWx1ZVxyXG4gKi9cclxuTG9uZy5mcm9tQnl0ZXMgPSBmdW5jdGlvbiBmcm9tQnl0ZXMoYnl0ZXMsIHVuc2lnbmVkLCBsZSkge1xyXG4gICAgcmV0dXJuIGxlID8gTG9uZy5mcm9tQnl0ZXNMRShieXRlcywgdW5zaWduZWQpIDogTG9uZy5mcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBMb25nIGZyb20gaXRzIGxpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvbi5cclxuICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGJ5dGVzIExpdHRsZSBlbmRpYW4gYnl0ZSByZXByZXNlbnRhdGlvblxyXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSB1bnNpZ25lZCBXaGV0aGVyIHVuc2lnbmVkIG9yIG5vdCwgZGVmYXVsdHMgdG8gc2lnbmVkXHJcbiAqIEByZXR1cm5zIHtMb25nfSBUaGUgY29ycmVzcG9uZGluZyBMb25nIHZhbHVlXHJcbiAqL1xyXG5Mb25nLmZyb21CeXRlc0xFID0gZnVuY3Rpb24gZnJvbUJ5dGVzTEUoYnl0ZXMsIHVuc2lnbmVkKSB7XHJcbiAgICByZXR1cm4gbmV3IExvbmcoXHJcbiAgICAgICAgYnl0ZXNbMF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzFdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1syXSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbM10gPDwgMjQsXHJcbiAgICAgICAgYnl0ZXNbNF0gICAgICAgfFxyXG4gICAgICAgIGJ5dGVzWzVdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s2XSA8PCAxNiB8XHJcbiAgICAgICAgYnl0ZXNbN10gPDwgMjQsXHJcbiAgICAgICAgdW5zaWduZWRcclxuICAgICk7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIExvbmcgZnJvbSBpdHMgYmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uLlxyXG4gKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gYnl0ZXMgQmlnIGVuZGlhbiBieXRlIHJlcHJlc2VudGF0aW9uXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHVuc2lnbmVkIFdoZXRoZXIgdW5zaWduZWQgb3Igbm90LCBkZWZhdWx0cyB0byBzaWduZWRcclxuICogQHJldHVybnMge0xvbmd9IFRoZSBjb3JyZXNwb25kaW5nIExvbmcgdmFsdWVcclxuICovXHJcbkxvbmcuZnJvbUJ5dGVzQkUgPSBmdW5jdGlvbiBmcm9tQnl0ZXNCRShieXRlcywgdW5zaWduZWQpIHtcclxuICAgIHJldHVybiBuZXcgTG9uZyhcclxuICAgICAgICBieXRlc1s0XSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbNV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzZdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1s3XSxcclxuICAgICAgICBieXRlc1swXSA8PCAyNCB8XHJcbiAgICAgICAgYnl0ZXNbMV0gPDwgMTYgfFxyXG4gICAgICAgIGJ5dGVzWzJdIDw8ICA4IHxcclxuICAgICAgICBieXRlc1szXSxcclxuICAgICAgICB1bnNpZ25lZFxyXG4gICAgKTtcclxufTtcclxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbG9yMyB7XG4gIHI6IG51bWJlclxuICBnOiBudW1iZXJcbiAgYjogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VDb2xvcjMoKTogQ29sb3IzIHtcbiAgcmV0dXJuIHsgcjogMCwgZzogMCwgYjogMCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbG9yMyA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IENvbG9yMywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnIgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZyAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5nKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5iICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI5KS5mbG9hdChtZXNzYWdlLmIpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBDb2xvcjMge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZUNvbG9yMygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuciA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuZyA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UuYiA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IExvbmcgZnJvbSAnbG9uZydcbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkF2YXRhclNoYXBlIHtcbiAgaWQ6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IE5QQyAqL1xuICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gdXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOkJhc2VGZW1hbGUgKi9cbiAgYm9keVNoYXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gQ29sb3IzKFIgPSAwLjZmLCBHID0gMC40NjJmLCBCID0gMC4zNTZmKSAqL1xuICBza2luQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuMjgzZiwgRyA9IDAuMTQyZiwgQiA9IDBmKSAqL1xuICBoYWlyQ29sb3I/OiBDb2xvcjMgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBDb2xvcjMoUiA9IDAuNmYsIEcgPSAwLjQ2MmYsIEIgPSAwLjM1NmYpICovXG4gIGV5ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIGV4cHJlc3Npb25UcmlnZ2VySWQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSB0aW1lc3RhbXAgKi9cbiAgZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXA/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGFsa2luZz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqXG4gICAqIGRlZmF1bHQgPSBbXCJ1cm46ZGVjZW50cmFsYW5kOm9mZi1jaGFpbjpiYXNlLWF2YXRhcnM6Zl9leWVzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX2V5ZWJyb3dzXzAwXCIsXG4gICAqICBcInVybjpkZWNlbnRyYWxhbmQ6b2ZmLWNoYWluOmJhc2UtYXZhdGFyczpmX21vdXRoXzAwXCJcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOnN0YW5kYXJkX2hhaXJcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfc2ltcGxlX3llbGxvd190c2hpcnRcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmZfYnJvd25fdHJvdXNlcnNcIixcbiAgICogIFwidXJuOmRlY2VudHJhbGFuZDpvZmYtY2hhaW46YmFzZS1hdmF0YXJzOmJ1bl9zaG9lc1wiXVxuICAgKi9cbiAgd2VhcmFibGVzOiBzdHJpbmdbXVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJBdmF0YXJTaGFwZSgpOiBQQkF2YXRhclNoYXBlIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogJycsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGJvZHlTaGFwZTogdW5kZWZpbmVkLFxuICAgIHNraW5Db2xvcjogdW5kZWZpbmVkLFxuICAgIGhhaXJDb2xvcjogdW5kZWZpbmVkLFxuICAgIGV5ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgZXhwcmVzc2lvblRyaWdnZXJJZDogdW5kZWZpbmVkLFxuICAgIGV4cHJlc3Npb25UcmlnZ2VyVGltZXN0YW1wOiB1bmRlZmluZWQsXG4gICAgdGFsa2luZzogdW5kZWZpbmVkLFxuICAgIHdlYXJhYmxlczogW11cbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkF2YXRhclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJBdmF0YXJTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlkICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UuaWQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxOCkuc3RyaW5nKG1lc3NhZ2UubmFtZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm9keVNoYXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLmJvZHlTaGFwZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2tpbkNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5za2luQ29sb3IsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGFpckNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS5oYWlyQ29sb3IsIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXllQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmV5ZUNvbG9yLCB3cml0ZXIudWludDMyKDUwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig1OCkuc3RyaW5nKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZXhwcmVzc2lvblRyaWdnZXJUaW1lc3RhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2NCkuaW50NjQobWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGFsa2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDcyKS5ib29sKG1lc3NhZ2UudGFsa2luZylcbiAgICB9XG4gICAgZm9yIChjb25zdCB2IG9mIG1lc3NhZ2Uud2VhcmFibGVzKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgyKS5zdHJpbmcodiEpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkF2YXRhclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkF2YXRhclNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5pZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLm5hbWUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5ib2R5U2hhcGUgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5za2luQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmhhaXJDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZXllQ29sb3IgPSBDb2xvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmV4cHJlc3Npb25UcmlnZ2VySWQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5leHByZXNzaW9uVHJpZ2dlclRpbWVzdGFtcCA9IGxvbmdUb051bWJlcihyZWFkZXIuaW50NjQoKSBhcyBMb25nKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRhbGtpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLndlYXJhYmxlcy5wdXNoKHJlYWRlci5zdHJpbmcoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cblxuZGVjbGFyZSB2YXIgc2VsZjogYW55IHwgdW5kZWZpbmVkXG5kZWNsYXJlIHZhciB3aW5kb3c6IGFueSB8IHVuZGVmaW5lZFxuZGVjbGFyZSB2YXIgZ2xvYmFsOiBhbnkgfCB1bmRlZmluZWRcbnZhciBnbG9iYWxUaGlzOiBhbnkgPSAoKCkgPT4ge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsVGhpc1xuICBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gc2VsZlxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHJldHVybiB3aW5kb3dcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZ2xvYmFsXG4gIHRocm93ICdVbmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnXG59KSgpXG5cbmZ1bmN0aW9uIGxvbmdUb051bWJlcihsb25nOiBMb25nKTogbnVtYmVyIHtcbiAgaWYgKGxvbmcuZ3QoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSB7XG4gICAgdGhyb3cgbmV3IGdsb2JhbFRoaXMuRXJyb3IoJ1ZhbHVlIGlzIGxhcmdlciB0aGFuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSJylcbiAgfVxuICByZXR1cm4gbG9uZy50b051bWJlcigpXG59XG5cbmlmIChfbTAudXRpbC5Mb25nICE9PSBMb25nKSB7XG4gIF9tMC51dGlsLkxvbmcgPSBMb25nIGFzIGFueVxuICBfbTAuY29uZmlndXJlKClcbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJBdmF0YXJTaGFwZSB9IGZyb20gJy4vcGIvQXZhdGFyU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA4MFxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQXZhdGFyU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJBdmF0YXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJBdmF0YXJTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCQXZhdGFyU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQXZhdGFyU2hhcGUge1xuICAgIHJldHVybiBQQkF2YXRhclNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJBdmF0YXJTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQXZhdGFyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkJpbGxib2FyZCB7XG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgeD86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICB5PzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD10cnVlICovXG4gIHo/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJpbGxib2FyZCgpOiBQQkJpbGxib2FyZCB7XG4gIHJldHVybiB7IHg6IHVuZGVmaW5lZCwgeTogdW5kZWZpbmVkLCB6OiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkJpbGxib2FyZCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCQmlsbGJvYXJkLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UueCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS54KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS55ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS55KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS56ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS56KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJCaWxsYm9hcmQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQmlsbGJvYXJkKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS54ID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnkgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UueiA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJCaWxsYm9hcmQgfSBmcm9tICcuL3BiL0JpbGxib2FyZC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDkwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmRTY2hlbWE6IElTY2hlbWE8UEJCaWxsYm9hcmQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQmlsbGJvYXJkLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJCaWxsYm9hcmQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCQmlsbGJvYXJkIHtcbiAgICByZXR1cm4gUEJCaWxsYm9hcmQuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkJpbGxib2FyZCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCQmlsbGJvYXJkLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJCb3hTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICB1dnM6IG51bWJlcltdXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkJveFNoYXBlKCk6IFBCQm94U2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCQm94U2hhcGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkJveFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKVxuICAgIGZvciAoY29uc3QgdiBvZiBtZXNzYWdlLnV2cykge1xuICAgICAgd3JpdGVyLmZsb2F0KHYpXG4gICAgfVxuICAgIHdyaXRlci5sZGVsaW0oKVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQkJveFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkJveFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQm94U2hhcGUgfSBmcm9tICcuL3BiL0JveFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTNcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQm94U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQm94U2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkJveFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkJveFNoYXBlIHtcbiAgICByZXR1cm4gUEJCb3hTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQm94U2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkJveFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ2FtZXJhTW9kZVZhbHVlIH0gZnJvbSAnLi9jb21tb24vQ2FtZXJhTW9kZVZhbHVlLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCQ2FtZXJhTW9kZSB7XG4gIG1vZGU6IENhbWVyYU1vZGVWYWx1ZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKCk6IFBCQ2FtZXJhTW9kZSB7XG4gIHJldHVybiB7IG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGUgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQkNhbWVyYU1vZGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5tb2RlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJDYW1lcmFNb2RlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZSB9IGZyb20gJy4vcGIvQ2FtZXJhTW9kZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDcyXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDYW1lcmFNb2RlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDYW1lcmFNb2RlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGUge1xuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkNhbWVyYU1vZGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDYW1lcmFNb2RlVmFsdWUgfSBmcm9tICcuL2NvbW1vbi9DYW1lcmFNb2RlVmFsdWUuZ2VuJ1xuaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gJy4vY29tbW9uL1ZlY3RvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDYW1lcmFNb2RlQXJlYSB7XG4gIGFyZWE6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbW9kZTogQ2FtZXJhTW9kZVZhbHVlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQkNhbWVyYU1vZGVBcmVhKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICByZXR1cm4geyBhcmVhOiB1bmRlZmluZWQsIG1vZGU6IDAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQkNhbWVyYU1vZGVBcmVhID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDYW1lcmFNb2RlQXJlYSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmFyZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5hcmVhLCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1vZGUgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UubW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCQ2FtZXJhTW9kZUFyZWEoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmFyZWEgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5tb2RlID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ2FtZXJhTW9kZUFyZWEgfSBmcm9tICcuL3BiL0NhbWVyYU1vZGVBcmVhLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNzFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGVBcmVhU2NoZW1hOiBJU2NoZW1hPFBCQ2FtZXJhTW9kZUFyZWE+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCQ2FtZXJhTW9kZUFyZWEsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQkNhbWVyYU1vZGVBcmVhLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkNhbWVyYU1vZGVBcmVhIHtcbiAgICByZXR1cm4gUEJDYW1lcmFNb2RlQXJlYS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCQ2FtZXJhTW9kZUFyZWEge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkNhbWVyYU1vZGVBcmVhLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJDeWxpbmRlclNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJDeWxpbmRlclNoYXBlKCk6IFBCQ3lsaW5kZXJTaGFwZSB7XG4gIHJldHVybiB7XG4gICAgd2l0aENvbGxpc2lvbnM6IHVuZGVmaW5lZCxcbiAgICBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsXG4gICAgdmlzaWJsZTogdW5kZWZpbmVkLFxuICAgIHJhZGl1c1RvcDogdW5kZWZpbmVkLFxuICAgIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkXG4gIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJDeWxpbmRlclNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJDeWxpbmRlclNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2Uud2l0aENvbGxpc2lvbnMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJhZGl1c1RvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLnJhZGl1c1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzQm90dG9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UucmFkaXVzQm90dG9tKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJDeWxpbmRlclNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQkN5bGluZGVyU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNUb3AgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLnJhZGl1c0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCQ3lsaW5kZXJTaGFwZSB9IGZyb20gJy4vcGIvQ3lsaW5kZXJTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDE2XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCQ3lsaW5kZXJTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJDeWxpbmRlclNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJDeWxpbmRlclNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQkN5bGluZGVyU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkN5bGluZGVyU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQkdMVEZTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJHTFRGU2hhcGUoKTogUEJHTFRGU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgc3JjOiAnJyB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCR0xURlNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJHTFRGU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigzNCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJHTFRGU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCR0xURlNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCR0xURlNoYXBlIH0gZnJvbSAnLi9wYi9HTFRGU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA0MVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCR0xURlNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQkdMVEZTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCR0xURlNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQkdMVEZTaGFwZSB7XG4gICAgcmV0dXJuIFBCR0xURlNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJHTFRGU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQkdMVEZTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IENvbG9yMyB9IGZyb20gJy4vY29tbW9uL0NvbG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gVGV4dHVyZVdyYXBNb2RlIHtcbiAgUmVwZWF0ID0gMCxcbiAgQ2xhbXAgPSAxLFxuICBNaXJyb3IgPSAyLFxuICBNaXJyb3JPbmNlID0gMyxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gRmlsdGVyTW9kZSB7XG4gIFBvaW50ID0gMCxcbiAgQmlsaW5lYXIgPSAxLFxuICBUcmlsaW5lYXIgPSAyLFxuICBVTlJFQ09HTklaRUQgPSAtMVxufVxuXG5leHBvcnQgY29uc3QgZW51bSBUcmFuc3BhcmVuY3lNb2RlIHtcbiAgT3BhcXVlID0gMCxcbiAgQWxwaGFUZXN0ID0gMSxcbiAgQWxwaGFCbGVuZCA9IDIsXG4gIEFscGhhVGVzdEFuZEFscGhhQmxlbmQgPSAzLFxuICBBdXRvID0gNCxcbiAgVU5SRUNPR05JWkVEID0gLTFcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsIHtcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIHRleHR1cmU/OiBQQk1hdGVyaWFsX1RleHR1cmUgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAwLjUuIHJhbmdlIHZhbHVlOiBmcm9tIDAgdG8gMSAqL1xuICBhbHBoYVRlc3Q/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAgdHJ1ZSAqL1xuICBjYXN0U2hhZG93cz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSBudWxsICovXG4gIGFscGhhVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IG51bGwgKi9cbiAgZW1pc3NpdmVUZXh0dXJlPzogUEJNYXRlcmlhbF9UZXh0dXJlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gbnVsbCAqL1xuICBidW1wVGV4dHVyZT86IFBCTWF0ZXJpYWxfVGV4dHVyZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IHdoaXRlOyAqL1xuICBhbGJlZG9Db2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IGJsYWNrOyAqL1xuICBlbWlzc2l2ZUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gd2hpdGU7ICovXG4gIHJlZmxlY3Rpdml0eUNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gVHJhbnNwYXJlbmN5TW9kZS5BdXRvICovXG4gIHRyYW5zcGFyZW5jeU1vZGU/OiBUcmFuc3BhcmVuY3lNb2RlIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIG1ldGFsbGljPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMC41ICovXG4gIHJvdWdobmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgZ2xvc3NpbmVzcz86IG51bWJlciB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IDEgKi9cbiAgc3BlY3VsYXJJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQgPSAyICovXG4gIGVtaXNzaXZlSW50ZW5zaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0ID0gMSAqL1xuICBkaXJlY3RJbnRlbnNpdHk/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1hdGVyaWFsX1RleHR1cmUge1xuICBzcmM6IHN0cmluZ1xuICAvKiogZGVmYXVsdCA9IFRleHR1cmVXcmFwTW9kZS5DbGFtcCAqL1xuICB3cmFwTW9kZT86IFRleHR1cmVXcmFwTW9kZSB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdCA9IEZpbHRlck1vZGUuQmlsaW5lYXIgKi9cbiAgZmlsdGVyTW9kZT86IEZpbHRlck1vZGUgfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWF0ZXJpYWwoKTogUEJNYXRlcmlhbCB7XG4gIHJldHVybiB7XG4gICAgdGV4dHVyZTogdW5kZWZpbmVkLFxuICAgIGFscGhhVGVzdDogdW5kZWZpbmVkLFxuICAgIGNhc3RTaGFkb3dzOiB1bmRlZmluZWQsXG4gICAgYWxwaGFUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgZW1pc3NpdmVUZXh0dXJlOiB1bmRlZmluZWQsXG4gICAgYnVtcFRleHR1cmU6IHVuZGVmaW5lZCxcbiAgICBhbGJlZG9Db2xvcjogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlQ29sb3I6IHVuZGVmaW5lZCxcbiAgICByZWZsZWN0aXZpdHlDb2xvcjogdW5kZWZpbmVkLFxuICAgIHRyYW5zcGFyZW5jeU1vZGU6IHVuZGVmaW5lZCxcbiAgICBtZXRhbGxpYzogdW5kZWZpbmVkLFxuICAgIHJvdWdobmVzczogdW5kZWZpbmVkLFxuICAgIGdsb3NzaW5lc3M6IHVuZGVmaW5lZCxcbiAgICBzcGVjdWxhckludGVuc2l0eTogdW5kZWZpbmVkLFxuICAgIGVtaXNzaXZlSW50ZW5zaXR5OiB1bmRlZmluZWQsXG4gICAgZGlyZWN0SW50ZW5zaXR5OiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1hdGVyaWFsID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLnRleHR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNYXRlcmlhbF9UZXh0dXJlLmVuY29kZShtZXNzYWdlLnRleHR1cmUsIHdyaXRlci51aW50MzIoMTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYWxwaGFUZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjEpLmZsb2F0KG1lc3NhZ2UuYWxwaGFUZXN0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jYXN0U2hhZG93cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UuY2FzdFNoYWRvd3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFscGhhVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuYWxwaGFUZXh0dXJlLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1hdGVyaWFsX1RleHR1cmUuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVUZXh0dXJlLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmJ1bXBUZXh0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWF0ZXJpYWxfVGV4dHVyZS5lbmNvZGUobWVzc2FnZS5idW1wVGV4dHVyZSwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5hbGJlZG9Db2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuYWxiZWRvQ29sb3IsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UuZW1pc3NpdmVDb2xvciwgd3JpdGVyLnVpbnQzMig2NikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBDb2xvcjMuZW5jb2RlKG1lc3NhZ2UucmVmbGVjdGl2aXR5Q29sb3IsIHdyaXRlci51aW50MzIoNzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudHJhbnNwYXJlbmN5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgwKS5pbnQzMihtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1ldGFsbGljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTMpLmZsb2F0KG1lc3NhZ2UubWV0YWxsaWMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnJvdWdobmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwMSkuZmxvYXQobWVzc2FnZS5yb3VnaG5lc3MpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmdsb3NzaW5lc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMDkpLmZsb2F0KG1lc3NhZ2UuZ2xvc3NpbmVzcylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMTcpLmZsb2F0KG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTI1KS5mbG9hdChtZXNzYWdlLmVtaXNzaXZlSW50ZW5zaXR5KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3RJbnRlbnNpdHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMzMpLmZsb2F0KG1lc3NhZ2UuZGlyZWN0SW50ZW5zaXR5KVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNYXRlcmlhbCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuYWxwaGFUZXN0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5jYXN0U2hhZG93cyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5hbHBoYVRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmVtaXNzaXZlVGV4dHVyZSA9IFBCTWF0ZXJpYWxfVGV4dHVyZS5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuYnVtcFRleHR1cmUgPSBQQk1hdGVyaWFsX1RleHR1cmUuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmFsYmVkb0NvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgbWVzc2FnZS5yZWZsZWN0aXZpdHlDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBtZXNzYWdlLnRyYW5zcGFyZW5jeU1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIG1lc3NhZ2UubWV0YWxsaWMgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgbWVzc2FnZS5yb3VnaG5lc3MgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgbWVzc2FnZS5nbG9zc2luZXNzID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3BlY3VsYXJJbnRlbnNpdHkgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTU6XG4gICAgICAgICAgbWVzc2FnZS5lbWlzc2l2ZUludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdEludGVuc2l0eSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1hdGVyaWFsX1RleHR1cmUoKTogUEJNYXRlcmlhbF9UZXh0dXJlIHtcbiAgcmV0dXJuIHsgc3JjOiAnJywgd3JhcE1vZGU6IHVuZGVmaW5lZCwgZmlsdGVyTW9kZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNYXRlcmlhbF9UZXh0dXJlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNYXRlcmlhbF9UZXh0dXJlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2Uuc3JjICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2Uuc3JjKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS53cmFwTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5pbnQzMihtZXNzYWdlLndyYXBNb2RlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5maWx0ZXJNb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmludDMyKG1lc3NhZ2UuZmlsdGVyTW9kZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWF0ZXJpYWxfVGV4dHVyZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNYXRlcmlhbF9UZXh0dXJlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5zcmMgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS53cmFwTW9kZSA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmZpbHRlck1vZGUgPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJNYXRlcmlhbCB9IGZyb20gJy4vcGIvTWF0ZXJpYWwuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxN1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWF0ZXJpYWxTY2hlbWE6IElTY2hlbWE8UEJNYXRlcmlhbD4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNYXRlcmlhbCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCTWF0ZXJpYWwuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCTWF0ZXJpYWwge1xuICAgIHJldHVybiBQQk1hdGVyaWFsLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJNYXRlcmlhbCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCTWF0ZXJpYWwuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGNvbnN0IGVudW0gQ29sbGlkZXJMYXllciB7XG4gIE5vbmUgPSAwLFxuICBQb2ludGVyID0gMSxcbiAgUGh5c2ljcyA9IDIsXG4gIFVOUkVDT0dOSVpFRCA9IC0xXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXIge1xuICAvKiogZGVmYXVsdCA9IENvbGxpZGVyTGF5ZXIuUGh5c2ljcyB8IENvbGxpZGVyTGF5ZXIuUG9pbnRlciAqL1xuICBjb2xsaXNpb25NYXNrPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGJveDogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCB7XG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNUb3A/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wICovXG4gIHJhZGl1c0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge31cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgcmV0dXJuIHsgY29sbGlzaW9uTWFzazogdW5kZWZpbmVkLCBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaENvbGxpZGVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuY29sbGlzaW9uTWFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmludDMyKG1lc3NhZ2UuY29sbGlzaW9uTWFzaylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaENvbGxpZGVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDE4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigyNikuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmNvbGxpc2lvbk1hc2sgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaENvbGxpZGVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9Cb3hNZXNoKCk6IFBCTWVzaENvbGxpZGVyX0JveE1lc2gge1xuICByZXR1cm4ge31cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKF86IFBCTWVzaENvbGxpZGVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoQ29sbGlkZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hDb2xsaWRlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoKCk6IFBCTWVzaENvbGxpZGVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7fVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoQ29sbGlkZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hDb2xsaWRlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoQ29sbGlkZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hDb2xsaWRlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaENvbGxpZGVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hDb2xsaWRlciB9IGZyb20gJy4vcGIvTWVzaENvbGxpZGVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTlcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hDb2xsaWRlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoQ29sbGlkZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hDb2xsaWRlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoQ29sbGlkZXIge1xuICAgIHJldHVybiBQQk1lc2hDb2xsaWRlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaENvbGxpZGVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoQ29sbGlkZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlciB7XG4gIGJveDogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB8IHVuZGVmaW5lZFxuICBzcGhlcmU6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggfCB1bmRlZmluZWRcbiAgY3lsaW5kZXI6IFBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCB8IHVuZGVmaW5lZFxuICBwbGFuZTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHwgdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gIHV2czogbnVtYmVyW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAvKiogZGVmYXVsdD0xLjAgKi9cbiAgcmFkaXVzVG9wPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEuMCAqL1xuICByYWRpdXNCb3R0b20/OiBudW1iZXIgfCB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gge1xuICB1dnM6IG51bWJlcltdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCB7fVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKTogUEJNZXNoUmVuZGVyZXIge1xuICByZXR1cm4geyBib3g6IHVuZGVmaW5lZCwgc3BoZXJlOiB1bmRlZmluZWQsIGN5bGluZGVyOiB1bmRlZmluZWQsIHBsYW5lOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlciA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UuYm94ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZW5jb2RlKG1lc3NhZ2UuYm94LCB3cml0ZXIudWludDMyKDEwKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNwaGVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLmVuY29kZShtZXNzYWdlLnNwaGVyZSwgd3JpdGVyLnVpbnQzMigxOCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5jeWxpbmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2guZW5jb2RlKG1lc3NhZ2UuY3lsaW5kZXIsIHdyaXRlci51aW50MzIoMjYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGxhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoLmVuY29kZShtZXNzYWdlLnBsYW5lLCB3cml0ZXIudWludDMyKDM0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlciB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXIoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLmJveCA9IFBCTWVzaFJlbmRlcmVyX0JveE1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnNwaGVyZSA9IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2guZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmN5bGluZGVyID0gUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5wbGFuZSA9IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaC5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9Cb3hNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gge1xuICByZXR1cm4geyB1dnM6IFtdIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQm94TWVzaCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCTWVzaFJlbmRlcmVyX0JveE1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfQm94TWVzaCB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfQm94TWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmICgodGFnICYgNykgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZDIgPSByZWFkZXIudWludDMyKCkgKyByZWFkZXIucG9zXG4gICAgICAgICAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZDIpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZS51dnMucHVzaChyZWFkZXIuZmxvYXQoKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2goKTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoIHtcbiAgcmV0dXJuIHsgcmFkaXVzVG9wOiB1bmRlZmluZWQsIHJhZGl1c0JvdHRvbTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJNZXNoUmVuZGVyZXJfQ3lsaW5kZXJNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UucmFkaXVzVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTMpLmZsb2F0KG1lc3NhZ2UucmFkaXVzVG9wKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5yYWRpdXNCb3R0b20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyMSkuZmxvYXQobWVzc2FnZS5yYWRpdXNCb3R0b20pXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk1lc2hSZW5kZXJlcl9DeWxpbmRlck1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX0N5bGluZGVyTWVzaCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UucmFkaXVzVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5yYWRpdXNCb3R0b20gPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoKCk6IFBCTWVzaFJlbmRlcmVyX1BsYW5lTWVzaCB7XG4gIHJldHVybiB7IHV2czogW10gfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2ggPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2gsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICB3cml0ZXIudWludDMyKDEwKS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJNZXNoUmVuZGVyZXJfUGxhbmVNZXNoIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk1lc2hSZW5kZXJlcl9QbGFuZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoKHRhZyAmIDcpID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBlbmQyID0gcmVhZGVyLnVpbnQzMigpICsgcmVhZGVyLnBvc1xuICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQyKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lc3NhZ2UudXZzLnB1c2gocmVhZGVyLmZsb2F0KCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJNZXNoUmVuZGVyZXJfU3BoZXJlTWVzaCgpOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoIHtcbiAgcmV0dXJuIHt9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2ggPSB7XG4gIGVuY29kZShfOiBQQk1lc2hSZW5kZXJlcl9TcGhlcmVNZXNoLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2gge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCTWVzaFJlbmRlcmVyX1NwaGVyZU1lc2goKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk1lc2hSZW5kZXJlciB9IGZyb20gJy4vcGIvTWVzaFJlbmRlcmVyLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMThcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlclNjaGVtYTogSVNjaGVtYTxQQk1lc2hSZW5kZXJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJNZXNoUmVuZGVyZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk1lc2hSZW5kZXJlci5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJNZXNoUmVuZGVyZXIge1xuICAgIHJldHVybiBQQk1lc2hSZW5kZXJlci5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTWVzaFJlbmRlcmVyIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJNZXNoUmVuZGVyZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJORlRTaGFwZSB7XG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICB3aXRoQ29sbGlzaW9ucz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIGlzUG9pbnRlckJsb2NrZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgSGlkZGVuQ29tcG9uZW50IGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM1MyAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xuICBhc3NldElkPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIHN0eWxlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGNvbG9yPzogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk5GVFNoYXBlKCk6IFBCTkZUU2hhcGUge1xuICByZXR1cm4ge1xuICAgIHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsXG4gICAgaXNQb2ludGVyQmxvY2tlcjogdW5kZWZpbmVkLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICBzcmM6ICcnLFxuICAgIGFzc2V0SWQ6IHVuZGVmaW5lZCxcbiAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgIGNvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk5GVFNoYXBlID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJORlRTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zcmMgIT09ICcnKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM0KS5zdHJpbmcobWVzc2FnZS5zcmMpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmFzc2V0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0Mikuc3RyaW5nKG1lc3NhZ2UuYXNzZXRJZClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc3R5bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig0OCkuaW50MzIobWVzc2FnZS5zdHlsZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuY29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLmNvbG9yLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk5GVFNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk5GVFNoYXBlKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS53aXRoQ29sbGlzaW9ucyA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLnZpc2libGUgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc3JjID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuYXNzZXRJZCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnN0eWxlID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5jb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCTkZUU2hhcGUgfSBmcm9tICcuL3BiL05GVFNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNDBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE5GVFNoYXBlU2NoZW1hOiBJU2NoZW1hPFBCTkZUU2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCTkZUU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk5GVFNoYXBlLmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk5GVFNoYXBlIHtcbiAgICByZXR1cm4gUEJORlRTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCTkZUU2hhcGUge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk5GVFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQWN0aW9uQnV0dG9uIH0gZnJvbSAnLi9jb21tb24vQWN0aW9uQnV0dG9uLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCT25Qb2ludGVyRG93biB7XG4gIC8qKiBkZWZhdWx0PUFjdGlvbkJ1dHRvbi5BTlkgKi9cbiAgYnV0dG9uPzogQWN0aW9uQnV0dG9uIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PSdJbnRlcmFjdCcgKi9cbiAgaG92ZXJUZXh0Pzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIG1heERpc3RhbmNlPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgc2hvd0ZlZWRiYWNrPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJPblBvaW50ZXJEb3duKCk6IFBCT25Qb2ludGVyRG93biB7XG4gIHJldHVybiB7IGJ1dHRvbjogdW5kZWZpbmVkLCBob3ZlclRleHQ6IHVuZGVmaW5lZCwgbWF4RGlzdGFuY2U6IHVuZGVmaW5lZCwgc2hvd0ZlZWRiYWNrOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd24gPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd24sIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlckRvd24ge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93bigpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuYnV0dG9uID0gcmVhZGVyLmludDMyKCkgYXMgYW55XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIG1lc3NhZ2UuaG92ZXJUZXh0ID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UubWF4RGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLnNob3dGZWVkYmFjayA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjBcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25TY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd24sIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd24uZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93biB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93biB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93bi5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICBidXR0b246IEFjdGlvbkJ1dHRvblxuICBtZXNoTmFtZTogc3RyaW5nXG4gIG9yaWdpbjogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXJlY3Rpb246IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgcG9pbnQ6IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgbm9ybWFsOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIGRpc3RhbmNlOiBudW1iZXJcbiAgdGltZXN0YW1wOiBudW1iZXJcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCT25Qb2ludGVyRG93blJlc3VsdCgpOiBQQk9uUG9pbnRlckRvd25SZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlckRvd25SZXN1bHQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmludDMyKG1lc3NhZ2UuYnV0dG9uKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5tZXNoTmFtZSAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjYpLnN0cmluZyhtZXNzYWdlLm1lc2hOYW1lKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5vcmlnaW4sIHdyaXRlci51aW50MzIoMzQpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlyZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UuZGlyZWN0aW9uLCB3cml0ZXIudWludDMyKDQyKS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2UucG9pbnQsIHdyaXRlci51aW50MzIoNTApLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uubm9ybWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIFZlY3RvcjMuZW5jb2RlKG1lc3NhZ2Uubm9ybWFsLCB3cml0ZXIudWludDMyKDU4KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmRpc3RhbmNlICE9PSAwKSB7XG4gICAgICB3cml0ZXIudWludDMyKDY5KS5mbG9hdChtZXNzYWdlLmRpc3RhbmNlKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS50aW1lc3RhbXAgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNzIpLmludDMyKG1lc3NhZ2UudGltZXN0YW1wKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJPblBvaW50ZXJEb3duUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlckRvd25SZXN1bHQoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmJ1dHRvbiA9IHJlYWRlci5pbnQzMigpIGFzIGFueVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLm1lc2hOYW1lID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uub3JpZ2luID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIG1lc3NhZ2UuZGlyZWN0aW9uID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UucG9pbnQgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbWVzc2FnZS5ub3JtYWwgPSBWZWN0b3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS5kaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2UudGltZXN0YW1wID0gcmVhZGVyLmludDMyKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJPblBvaW50ZXJEb3duUmVzdWx0IH0gZnJvbSAnLi9wYi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjZcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWE6IElTY2hlbWE8UEJPblBvaW50ZXJEb3duUmVzdWx0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlckRvd25SZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlckRvd25SZXN1bHQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyRG93blJlc3VsdCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCT25Qb2ludGVyRG93blJlc3VsdC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwIHtcbiAgLyoqIGRlZmF1bHQ9QWN0aW9uQnV0dG9uLkFOWSAqL1xuICBidXR0b24/OiBBY3Rpb25CdXR0b24gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J0ludGVyYWN0JyAqL1xuICBob3ZlclRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MTAgKi9cbiAgbWF4RGlzdGFuY2U/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9dHJ1ZSAqL1xuICBzaG93RmVlZGJhY2s/OiBib29sZWFuIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKCk6IFBCT25Qb2ludGVyVXAge1xuICByZXR1cm4geyBidXR0b246IHVuZGVmaW5lZCwgaG92ZXJUZXh0OiB1bmRlZmluZWQsIG1heERpc3RhbmNlOiB1bmRlZmluZWQsIHNob3dGZWVkYmFjazogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJPblBvaW50ZXJVcCA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCT25Qb2ludGVyVXAsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS5idXR0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5pbnQzMihtZXNzYWdlLmJ1dHRvbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaG92ZXJUZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTgpLnN0cmluZyhtZXNzYWdlLmhvdmVyVGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubWF4RGlzdGFuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyOSkuZmxvYXQobWVzc2FnZS5tYXhEaXN0YW5jZSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMzIpLmJvb2wobWVzc2FnZS5zaG93RmVlZGJhY2spXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwKClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5ob3ZlclRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tYXhEaXN0YW5jZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIG1lc3NhZ2Uuc2hvd0ZlZWRiYWNrID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQk9uUG9pbnRlclVwIH0gZnJvbSAnLi9wYi9PblBvaW50ZXJVcC5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDYxXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFNjaGVtYTogSVNjaGVtYTxQQk9uUG9pbnRlclVwPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQk9uUG9pbnRlclVwLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJPblBvaW50ZXJVcC5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJPblBvaW50ZXJVcCB7XG4gICAgcmV0dXJuIFBCT25Qb2ludGVyVXAuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQk9uUG9pbnRlclVwIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJy4vY29tbW9uL0FjdGlvbkJ1dHRvbi5nZW4nXG5pbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9jb21tb24vVmVjdG9yMy5nZW4nXG5pbXBvcnQgX20wIGZyb20gJ3Byb3RvYnVmanMvbWluaW1hbCdcblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcHJvdG9idWZQYWNrYWdlID0gJydcblxuZXhwb3J0IGludGVyZmFjZSBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgYnV0dG9uOiBBY3Rpb25CdXR0b25cbiAgbWVzaE5hbWU6IHN0cmluZ1xuICBvcmlnaW46IFZlY3RvcjMgfCB1bmRlZmluZWRcbiAgZGlyZWN0aW9uOiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIHBvaW50OiBWZWN0b3IzIHwgdW5kZWZpbmVkXG4gIG5vcm1hbDogVmVjdG9yMyB8IHVuZGVmaW5lZFxuICBkaXN0YW5jZTogbnVtYmVyXG4gIHRpbWVzdGFtcDogbnVtYmVyXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICByZXR1cm4ge1xuICAgIGJ1dHRvbjogMCxcbiAgICBtZXNoTmFtZTogJycsXG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGlyZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgcG9pbnQ6IHVuZGVmaW5lZCxcbiAgICBub3JtYWw6IHVuZGVmaW5lZCxcbiAgICBkaXN0YW5jZTogMCxcbiAgICB0aW1lc3RhbXA6IDBcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQk9uUG9pbnRlclVwUmVzdWx0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJPblBvaW50ZXJVcFJlc3VsdCwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmJ1dHRvbiAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuaW50MzIobWVzc2FnZS5idXR0b24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm1lc2hOYW1lICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UubWVzaE5hbWUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLm9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBWZWN0b3IzLmVuY29kZShtZXNzYWdlLm9yaWdpbiwgd3JpdGVyLnVpbnQzMigzNCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5kaXJlY3Rpb24sIHdyaXRlci51aW50MzIoNDIpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5wb2ludCwgd3JpdGVyLnVpbnQzMig1MCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5ub3JtYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgVmVjdG9yMy5lbmNvZGUobWVzc2FnZS5ub3JtYWwsIHdyaXRlci51aW50MzIoNTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuZGlzdGFuY2UgIT09IDApIHtcbiAgICAgIHdyaXRlci51aW50MzIoNjkpLmZsb2F0KG1lc3NhZ2UuZGlzdGFuY2UpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRpbWVzdGFtcCAhPT0gMCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3MikuaW50MzIobWVzc2FnZS50aW1lc3RhbXApXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQk9uUG9pbnRlclVwUmVzdWx0KClcbiAgICB3aGlsZSAocmVhZGVyLnBvcyA8IGVuZCkge1xuICAgICAgY29uc3QgdGFnID0gcmVhZGVyLnVpbnQzMigpXG4gICAgICBzd2l0Y2ggKHRhZyA+Pj4gMykge1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS5idXR0b24gPSByZWFkZXIuaW50MzIoKSBhcyBhbnlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgbWVzc2FnZS5tZXNoTmFtZSA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBtZXNzYWdlLm9yaWdpbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBtZXNzYWdlLmRpcmVjdGlvbiA9IFZlY3RvcjMuZGVjb2RlKHJlYWRlciwgcmVhZGVyLnVpbnQzMigpKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICBtZXNzYWdlLnBvaW50ID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIG1lc3NhZ2Uubm9ybWFsID0gVmVjdG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIG1lc3NhZ2UuZGlzdGFuY2UgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBtZXNzYWdlLnRpbWVzdGFtcCA9IHJlYWRlci5pbnQzMigpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCT25Qb2ludGVyVXBSZXN1bHQgfSBmcm9tICcuL3BiL09uUG9pbnRlclVwUmVzdWx0LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwNjVcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hOiBJU2NoZW1hPFBCT25Qb2ludGVyVXBSZXN1bHQ+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCT25Qb2ludGVyVXBSZXN1bHQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQk9uUG9pbnRlclVwUmVzdWx0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQk9uUG9pbnRlclVwUmVzdWx0IHtcbiAgICByZXR1cm4gUEJPblBvaW50ZXJVcFJlc3VsdC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCT25Qb2ludGVyVXBSZXN1bHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQk9uUG9pbnRlclVwUmVzdWx0LmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJQbGFuZVNoYXBlIHtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBNZXNoQ29sbGlkZXIgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzY2ICovXG4gIHdpdGhDb2xsaXNpb25zPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgaXNQb2ludGVyQmxvY2tlcj86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIHV2czogbnVtYmVyW11cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUGxhbmVTaGFwZSgpOiBQQlBsYW5lU2hhcGUge1xuICByZXR1cm4geyB3aXRoQ29sbGlzaW9uczogdW5kZWZpbmVkLCBpc1BvaW50ZXJCbG9ja2VyOiB1bmRlZmluZWQsIHZpc2libGU6IHVuZGVmaW5lZCwgdXZzOiBbXSB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCUGxhbmVTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCUGxhbmVTaGFwZSwgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLndpdGhDb2xsaXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLndpdGhDb2xsaXNpb25zKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTYpLmJvb2wobWVzc2FnZS5pc1BvaW50ZXJCbG9ja2VyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMjQpLmJvb2wobWVzc2FnZS52aXNpYmxlKVxuICAgIH1cbiAgICB3cml0ZXIudWludDMyKDM0KS5mb3JrKClcbiAgICBmb3IgKGNvbnN0IHYgb2YgbWVzc2FnZS51dnMpIHtcbiAgICAgIHdyaXRlci5mbG9hdCh2KVxuICAgIH1cbiAgICB3cml0ZXIubGRlbGltKClcbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQbGFuZVNoYXBlIHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlBsYW5lU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgaWYgKCh0YWcgJiA3KSA9PT0gMikge1xuICAgICAgICAgICAgY29uc3QgZW5kMiA9IHJlYWRlci51aW50MzIoKSArIHJlYWRlci5wb3NcbiAgICAgICAgICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kMikge1xuICAgICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZXNzYWdlLnV2cy5wdXNoKHJlYWRlci5mbG9hdCgpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJQbGFuZVNoYXBlIH0gZnJvbSAnLi9wYi9QbGFuZVNoYXBlLmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwMTRcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBsYW5lU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJQbGFuZVNoYXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBsYW5lU2hhcGUsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlBsYW5lU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCUGxhbmVTaGFwZSB7XG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCUGxhbmVTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCUGxhbmVTaGFwZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCUG9pbnRlckxvY2sge1xuICBpc1BvaW50ZXJMb2NrZWQ6IGJvb2xlYW5cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCUG9pbnRlckxvY2soKTogUEJQb2ludGVyTG9jayB7XG4gIHJldHVybiB7IGlzUG9pbnRlckxvY2tlZDogZmFsc2UgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlBvaW50ZXJMb2NrID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJQb2ludGVyTG9jaywgd3JpdGVyOiBfbTAuV3JpdGVyID0gX20wLldyaXRlci5jcmVhdGUoKSk6IF9tMC5Xcml0ZXIge1xuICAgIGlmIChtZXNzYWdlLmlzUG9pbnRlckxvY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgd3JpdGVyLnVpbnQzMig4KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkKVxuICAgIH1cbiAgICByZXR1cm4gd3JpdGVyXG4gIH0sXG5cbiAgZGVjb2RlKGlucHV0OiBfbTAuUmVhZGVyIHwgVWludDhBcnJheSwgbGVuZ3RoPzogbnVtYmVyKTogUEJQb2ludGVyTG9jayB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJQb2ludGVyTG9jaygpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UuaXNQb2ludGVyTG9ja2VkID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmVhZGVyLnNraXBUeXBlKHRhZyAmIDcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBQQlBvaW50ZXJMb2NrIH0gZnJvbSAnLi9wYi9Qb2ludGVyTG9jay5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDc0XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQb2ludGVyTG9ja1NjaGVtYTogSVNjaGVtYTxQQlBvaW50ZXJMb2NrPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlBvaW50ZXJMb2NrLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJQb2ludGVyTG9jay5lbmNvZGUodmFsdWUpXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkod3JpdGVyLmZpbmlzaCgpLCAwLCB3cml0ZXIubGVuKVxuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIoYnVmZmVyLCBmYWxzZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogUEJQb2ludGVyTG9jayB7XG4gICAgcmV0dXJuIFBCUG9pbnRlckxvY2suZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlBvaW50ZXJMb2NrIHtcbiAgICAvLyBUT0RPOiB0aGlzIGlzIGEgaGFjay5cbiAgICByZXR1cm4gUEJQb2ludGVyTG9jay5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCU3BoZXJlU2hhcGUge1xuICAvKiogQGRlcHJlY2F0ZWQgdXNlIE1lc2hDb2xsaWRlciBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNjYgKi9cbiAgd2l0aENvbGxpc2lvbnM/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgTWVzaENvbGxpZGVyIGluc3RlYWQgaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGsvaXNzdWVzLzM2NiAqL1xuICBpc1BvaW50ZXJCbG9ja2VyPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAvKiogQGRlcHJlY2F0ZWQgdXNlIEhpZGRlbkNvbXBvbmVudCBpbnN0ZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrL2lzc3Vlcy8zNTMgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCU3BoZXJlU2hhcGUoKTogUEJTcGhlcmVTaGFwZSB7XG4gIHJldHVybiB7IHdpdGhDb2xsaXNpb25zOiB1bmRlZmluZWQsIGlzUG9pbnRlckJsb2NrZXI6IHVuZGVmaW5lZCwgdmlzaWJsZTogdW5kZWZpbmVkIH1cbn1cblxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUEJTcGhlcmVTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCU3BoZXJlU2hhcGUsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS53aXRoQ29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDgpLmJvb2wobWVzc2FnZS53aXRoQ29sbGlzaW9ucylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE2KS5ib29sKG1lc3NhZ2UuaXNQb2ludGVyQmxvY2tlcilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudmlzaWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDI0KS5ib29sKG1lc3NhZ2UudmlzaWJsZSlcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCU3BoZXJlU2hhcGUge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCU3BoZXJlU2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLndpdGhDb2xsaXNpb25zID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLmlzUG9pbnRlckJsb2NrZXIgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJTcGhlcmVTaGFwZSB9IGZyb20gJy4vcGIvU3BoZXJlU2hhcGUuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTAxNVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgU3BoZXJlU2hhcGVTY2hlbWE6IElTY2hlbWE8UEJTcGhlcmVTaGFwZT4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogUEJTcGhlcmVTaGFwZSwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCU3BoZXJlU2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCU3BoZXJlU2hhcGUge1xuICAgIHJldHVybiBQQlNwaGVyZVNoYXBlLmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJTcGhlcmVTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCU3BoZXJlU2hhcGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KCkpXG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBDb2xvcjMgfSBmcm9tICcuL2NvbW1vbi9Db2xvcjMuZ2VuJ1xuaW1wb3J0IF9tMCBmcm9tICdwcm90b2J1ZmpzL21pbmltYWwnXG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IHByb3RvYnVmUGFja2FnZSA9ICcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUEJUZXh0U2hhcGUge1xuICB0ZXh0OiBzdHJpbmdcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBIaWRkZW5Db21wb25lbnQgaW5zdGVhZCBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL3Nkay9pc3N1ZXMvMzUzICovXG4gIHZpc2libGU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gIGZvbnQ/OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MS4wZiAqL1xuICBvcGFjaXR5PzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEwICovXG4gIGZvbnRTaXplPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGZvbnRBdXRvU2l6ZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9J2NlbnRlcicgKi9cbiAgaFRleHRBbGlnbj86IHN0cmluZyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0nY2VudGVyJyAqL1xuICB2VGV4dEFsaWduPzogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIC8qKiBkZWZhdWx0PTEgKi9cbiAgd2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9MSAqL1xuICBoZWlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcGFkZGluZ1RvcD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nUmlnaHQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgcGFkZGluZ0JvdHRvbT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBwYWRkaW5nTGVmdD86IG51bWJlciB8IHVuZGVmaW5lZFxuICBsaW5lU3BhY2luZz86IG51bWJlciB8IHVuZGVmaW5lZFxuICBsaW5lQ291bnQ/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgdGV4dFdyYXBwaW5nPzogYm9vbGVhbiB8IHVuZGVmaW5lZFxuICBzaGFkb3dCbHVyPzogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIHNoYWRvd09mZnNldFg/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgc2hhZG93T2Zmc2V0WT86IG51bWJlciB8IHVuZGVmaW5lZFxuICBvdXRsaW5lV2lkdGg/OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIGRlZmF1bHQ9KDEuMCwxLjAsMS4wKSAqL1xuICBzaGFkb3dDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIG91dGxpbmVDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxuICAvKiogZGVmYXVsdD0oMS4wLDEuMCwxLjApICovXG4gIHRleHRDb2xvcj86IENvbG9yMyB8IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNlUEJUZXh0U2hhcGUoKTogUEJUZXh0U2hhcGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6ICcnLFxuICAgIHZpc2libGU6IHVuZGVmaW5lZCxcbiAgICBmb250OiB1bmRlZmluZWQsXG4gICAgb3BhY2l0eTogdW5kZWZpbmVkLFxuICAgIGZvbnRTaXplOiB1bmRlZmluZWQsXG4gICAgZm9udEF1dG9TaXplOiB1bmRlZmluZWQsXG4gICAgaFRleHRBbGlnbjogdW5kZWZpbmVkLFxuICAgIHZUZXh0QWxpZ246IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgIHBhZGRpbmdUb3A6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nUmlnaHQ6IHVuZGVmaW5lZCxcbiAgICBwYWRkaW5nQm90dG9tOiB1bmRlZmluZWQsXG4gICAgcGFkZGluZ0xlZnQ6IHVuZGVmaW5lZCxcbiAgICBsaW5lU3BhY2luZzogdW5kZWZpbmVkLFxuICAgIGxpbmVDb3VudDogdW5kZWZpbmVkLFxuICAgIHRleHRXcmFwcGluZzogdW5kZWZpbmVkLFxuICAgIHNoYWRvd0JsdXI6IHVuZGVmaW5lZCxcbiAgICBzaGFkb3dPZmZzZXRYOiB1bmRlZmluZWQsXG4gICAgc2hhZG93T2Zmc2V0WTogdW5kZWZpbmVkLFxuICAgIG91dGxpbmVXaWR0aDogdW5kZWZpbmVkLFxuICAgIHNoYWRvd0NvbG9yOiB1bmRlZmluZWQsXG4gICAgb3V0bGluZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgdGV4dENvbG9yOiB1bmRlZmluZWRcbiAgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlRleHRTaGFwZSA9IHtcbiAgZW5jb2RlKG1lc3NhZ2U6IFBCVGV4dFNoYXBlLCB3cml0ZXI6IF9tMC5Xcml0ZXIgPSBfbTAuV3JpdGVyLmNyZWF0ZSgpKTogX20wLldyaXRlciB7XG4gICAgaWYgKG1lc3NhZ2UudGV4dCAhPT0gJycpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTApLnN0cmluZyhtZXNzYWdlLnRleHQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNikuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigyNikuc3RyaW5nKG1lc3NhZ2UuZm9udClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3BhY2l0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDM3KS5mbG9hdChtZXNzYWdlLm9wYWNpdHkpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNDUpLmZsb2F0KG1lc3NhZ2UuZm9udFNpemUpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmZvbnRBdXRvU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDQ4KS5ib29sKG1lc3NhZ2UuZm9udEF1dG9TaXplKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5oVGV4dEFsaWduICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoNTgpLnN0cmluZyhtZXNzYWdlLmhUZXh0QWxpZ24pXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnZUZXh0QWxpZ24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig2Nikuc3RyaW5nKG1lc3NhZ2UudlRleHRBbGlnbilcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMig3NykuZmxvYXQobWVzc2FnZS53aWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UuaGVpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoODUpLmZsb2F0KG1lc3NhZ2UuaGVpZ2h0KVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOTMpLmZsb2F0KG1lc3NhZ2UucGFkZGluZ1RvcClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ1JpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTAxKS5mbG9hdChtZXNzYWdlLnBhZGRpbmdSaWdodClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UucGFkZGluZ0JvdHRvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEwOSkuZmxvYXQobWVzc2FnZS5wYWRkaW5nQm90dG9tKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5wYWRkaW5nTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDExNykuZmxvYXQobWVzc2FnZS5wYWRkaW5nTGVmdClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UubGluZVNwYWNpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMjUpLmZsb2F0KG1lc3NhZ2UubGluZVNwYWNpbmcpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLmxpbmVDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEyOCkuaW50MzIobWVzc2FnZS5saW5lQ291bnQpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnRleHRXcmFwcGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDEzNikuYm9vbChtZXNzYWdlLnRleHRXcmFwcGluZylcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93Qmx1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cml0ZXIudWludDMyKDE0OSkuZmxvYXQobWVzc2FnZS5zaGFkb3dCbHVyKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5zaGFkb3dPZmZzZXRYICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTU3KS5mbG9hdChtZXNzYWdlLnNoYWRvd09mZnNldFgpXG4gICAgfVxuICAgIGlmIChtZXNzYWdlLnNoYWRvd09mZnNldFkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgd3JpdGVyLnVpbnQzMigxNjUpLmZsb2F0KG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSlcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uub3V0bGluZVdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoMTczKS5mbG9hdChtZXNzYWdlLm91dGxpbmVXaWR0aClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2Uuc2hhZG93Q29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLnNoYWRvd0NvbG9yLCB3cml0ZXIudWludDMyKDE3OCkuZm9yaygpKS5sZGVsaW0oKVxuICAgIH1cbiAgICBpZiAobWVzc2FnZS5vdXRsaW5lQ29sb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgQ29sb3IzLmVuY29kZShtZXNzYWdlLm91dGxpbmVDb2xvciwgd3JpdGVyLnVpbnQzMigxODYpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dENvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS50ZXh0Q29sb3IsIHdyaXRlci51aW50MzIoMTk0KS5mb3JrKCkpLmxkZWxpbSgpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlRleHRTaGFwZSB7XG4gICAgY29uc3QgcmVhZGVyID0gaW5wdXQgaW5zdGFuY2VvZiBfbTAuUmVhZGVyID8gaW5wdXQgOiBuZXcgX20wLlJlYWRlcihpbnB1dClcbiAgICBsZXQgZW5kID0gbGVuZ3RoID09PSB1bmRlZmluZWQgPyByZWFkZXIubGVuIDogcmVhZGVyLnBvcyArIGxlbmd0aFxuICAgIGNvbnN0IG1lc3NhZ2UgPSBjcmVhdGVCYXNlUEJUZXh0U2hhcGUoKVxuICAgIHdoaWxlIChyZWFkZXIucG9zIDwgZW5kKSB7XG4gICAgICBjb25zdCB0YWcgPSByZWFkZXIudWludDMyKClcbiAgICAgIHN3aXRjaCAodGFnID4+PiAzKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBtZXNzYWdlLnRleHQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgbWVzc2FnZS52aXNpYmxlID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBtZXNzYWdlLmZvbnQgPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgbWVzc2FnZS5vcGFjaXR5ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgbWVzc2FnZS5mb250U2l6ZSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIG1lc3NhZ2UuZm9udEF1dG9TaXplID0gcmVhZGVyLmJvb2woKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBtZXNzYWdlLmhUZXh0QWxpZ24gPSByZWFkZXIuc3RyaW5nKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgbWVzc2FnZS52VGV4dEFsaWduID0gcmVhZGVyLnN0cmluZygpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIG1lc3NhZ2Uud2lkdGggPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgbWVzc2FnZS5oZWlnaHQgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgbWVzc2FnZS5wYWRkaW5nVG9wID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ1JpZ2h0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgIG1lc3NhZ2UucGFkZGluZ0JvdHRvbSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICBtZXNzYWdlLnBhZGRpbmdMZWZ0ID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgIG1lc3NhZ2UubGluZVNwYWNpbmcgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTY6XG4gICAgICAgICAgbWVzc2FnZS5saW5lQ291bnQgPSByZWFkZXIuaW50MzIoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgbWVzc2FnZS50ZXh0V3JhcHBpbmcgPSByZWFkZXIuYm9vbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd0JsdXIgPSByZWFkZXIuZmxvYXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgbWVzc2FnZS5zaGFkb3dPZmZzZXRYID0gcmVhZGVyLmZsb2F0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIG1lc3NhZ2Uuc2hhZG93T2Zmc2V0WSA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICBtZXNzYWdlLm91dGxpbmVXaWR0aCA9IHJlYWRlci5mbG9hdCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICBtZXNzYWdlLnNoYWRvd0NvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgIG1lc3NhZ2Uub3V0bGluZUNvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIG1lc3NhZ2UudGV4dENvbG9yID0gQ29sb3IzLmRlY29kZShyZWFkZXIsIHJlYWRlci51aW50MzIoKSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJUZXh0U2hhcGUgfSBmcm9tICcuL3BiL1RleHRTaGFwZS5nZW4nXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDT01QT05FTlRfSUQgPSAxMDMwXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUZXh0U2hhcGVTY2hlbWE6IElTY2hlbWE8UEJUZXh0U2hhcGU+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IFBCVGV4dFNoYXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3Qgd3JpdGVyID0gUEJUZXh0U2hhcGUuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVGV4dFNoYXBlIHtcbiAgICByZXR1cm4gUEJUZXh0U2hhcGUuZGVjb2RlKHJlYWRlci5idWZmZXIoKSwgcmVhZGVyLnJlbWFpbmluZ0J5dGVzKCkpXG4gIH0sXG4gIGNyZWF0ZSgpOiBQQlRleHRTaGFwZSB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVGV4dFNoYXBlLmRlY29kZShuZXcgVWludDhBcnJheSgpKVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQ29sb3IzIH0gZnJvbSAnLi9jb21tb24vQ29sb3IzLmdlbidcbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVWlUZXh0IHtcbiAgdGV4dDogc3RyaW5nXG4gIHRleHRDb2xvcjogQ29sb3IzIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VQQlVpVGV4dCgpOiBQQlVpVGV4dCB7XG4gIHJldHVybiB7IHRleHQ6ICcnLCB0ZXh0Q29sb3I6IHVuZGVmaW5lZCB9XG59XG5cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBCVWlUZXh0ID0ge1xuICBlbmNvZGUobWVzc2FnZTogUEJVaVRleHQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS50ZXh0ICE9PSAnJykge1xuICAgICAgd3JpdGVyLnVpbnQzMigxMCkuc3RyaW5nKG1lc3NhZ2UudGV4dClcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2UudGV4dENvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIENvbG9yMy5lbmNvZGUobWVzc2FnZS50ZXh0Q29sb3IsIHdyaXRlci51aW50MzIoMTgpLmZvcmsoKSkubGRlbGltKClcbiAgICB9XG4gICAgcmV0dXJuIHdyaXRlclxuICB9LFxuXG4gIGRlY29kZShpbnB1dDogX20wLlJlYWRlciB8IFVpbnQ4QXJyYXksIGxlbmd0aD86IG51bWJlcik6IFBCVWlUZXh0IHtcbiAgICBjb25zdCByZWFkZXIgPSBpbnB1dCBpbnN0YW5jZW9mIF9tMC5SZWFkZXIgPyBpbnB1dCA6IG5ldyBfbTAuUmVhZGVyKGlucHV0KVxuICAgIGxldCBlbmQgPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHJlYWRlci5sZW4gOiByZWFkZXIucG9zICsgbGVuZ3RoXG4gICAgY29uc3QgbWVzc2FnZSA9IGNyZWF0ZUJhc2VQQlVpVGV4dCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IHJlYWRlci5zdHJpbmcoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBtZXNzYWdlLnRleHRDb2xvciA9IENvbG9yMy5kZWNvZGUocmVhZGVyLCByZWFkZXIudWludDMyKCkpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZWFkZXIuc2tpcFR5cGUodGFnICYgNylcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG59XG4iLCJpbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IFBCVWlUZXh0IH0gZnJvbSAnLi9wYi9VaVRleHQuZ2VuJ1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UX0lEID0gMTA1MlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVWlUZXh0U2NoZW1hOiBJU2NoZW1hPFBCVWlUZXh0PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlVpVGV4dCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGNvbnN0IHdyaXRlciA9IFBCVWlUZXh0LmVuY29kZSh2YWx1ZSlcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh3cml0ZXIuZmluaXNoKCksIDAsIHdyaXRlci5sZW4pXG4gICAgYnVpbGRlci53cml0ZUJ1ZmZlcihidWZmZXIsIGZhbHNlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBQQlVpVGV4dCB7XG4gICAgcmV0dXJuIFBCVWlUZXh0LmRlY29kZShyZWFkZXIuYnVmZmVyKCksIHJlYWRlci5yZW1haW5pbmdCeXRlcygpKVxuICB9LFxuICBjcmVhdGUoKTogUEJVaVRleHQge1xuICAgIC8vIFRPRE86IHRoaXMgaXMgYSBoYWNrLlxuICAgIHJldHVybiBQQlVpVGV4dC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBfbTAgZnJvbSAncHJvdG9idWZqcy9taW5pbWFsJ1xuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBwcm90b2J1ZlBhY2thZ2UgPSAnJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gIC8qKiBkZWZhdWx0PXRydWUgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmFzZVBCVmlzaWJpbGl0eUNvbXBvbmVudCgpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICByZXR1cm4geyB2aXNpYmxlOiB1bmRlZmluZWQgfVxufVxuXG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQQlZpc2liaWxpdHlDb21wb25lbnQgPSB7XG4gIGVuY29kZShtZXNzYWdlOiBQQlZpc2liaWxpdHlDb21wb25lbnQsIHdyaXRlcjogX20wLldyaXRlciA9IF9tMC5Xcml0ZXIuY3JlYXRlKCkpOiBfbTAuV3JpdGVyIHtcbiAgICBpZiAobWVzc2FnZS52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHdyaXRlci51aW50MzIoOCkuYm9vbChtZXNzYWdlLnZpc2libGUpXG4gICAgfVxuICAgIHJldHVybiB3cml0ZXJcbiAgfSxcblxuICBkZWNvZGUoaW5wdXQ6IF9tMC5SZWFkZXIgfCBVaW50OEFycmF5LCBsZW5ndGg/OiBudW1iZXIpOiBQQlZpc2liaWxpdHlDb21wb25lbnQge1xuICAgIGNvbnN0IHJlYWRlciA9IGlucHV0IGluc3RhbmNlb2YgX20wLlJlYWRlciA/IGlucHV0IDogbmV3IF9tMC5SZWFkZXIoaW5wdXQpXG4gICAgbGV0IGVuZCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gcmVhZGVyLmxlbiA6IHJlYWRlci5wb3MgKyBsZW5ndGhcbiAgICBjb25zdCBtZXNzYWdlID0gY3JlYXRlQmFzZVBCVmlzaWJpbGl0eUNvbXBvbmVudCgpXG4gICAgd2hpbGUgKHJlYWRlci5wb3MgPCBlbmQpIHtcbiAgICAgIGNvbnN0IHRhZyA9IHJlYWRlci51aW50MzIoKVxuICAgICAgc3dpdGNoICh0YWcgPj4+IDMpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG1lc3NhZ2UudmlzaWJsZSA9IHJlYWRlci5ib29sKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlYWRlci5za2lwVHlwZSh0YWcgJiA3KVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cbn1cbiIsImltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi8uLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgUEJWaXNpYmlsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi9wYi9WaXNpYmlsaXR5Q29tcG9uZW50LmdlbidcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDEwODFcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnRTY2hlbWE6IElTY2hlbWE8UEJWaXNpYmlsaXR5Q29tcG9uZW50PiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBQQlZpc2liaWxpdHlDb21wb25lbnQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3cml0ZXIgPSBQQlZpc2liaWxpdHlDb21wb25lbnQuZW5jb2RlKHZhbHVlKVxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHdyaXRlci5maW5pc2goKSwgMCwgd3JpdGVyLmxlbilcbiAgICBidWlsZGVyLndyaXRlQnVmZmVyKGJ1ZmZlciwgZmFsc2UpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIFBCVmlzaWJpbGl0eUNvbXBvbmVudC5kZWNvZGUocmVhZGVyLmJ1ZmZlcigpLCByZWFkZXIucmVtYWluaW5nQnl0ZXMoKSlcbiAgfSxcbiAgY3JlYXRlKCk6IFBCVmlzaWJpbGl0eUNvbXBvbmVudCB7XG4gICAgLy8gVE9ETzogdGhpcyBpcyBhIGhhY2suXG4gICAgcmV0dXJuIFBCVmlzaWJpbGl0eUNvbXBvbmVudC5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoKSlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBJRW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lL3R5cGVzJ1xuaW1wb3J0ICogYXMgVHJhbnNmb3JtU2NoZW1hIGZyb20gJy4uL2xlZ2FjeS9UcmFuc2Zvcm0nXG5pbXBvcnQgKiBhcyBBbmltYXRvclNjaGVtYSBmcm9tICcuL0FuaW1hdG9yLmdlbidcbmltcG9ydCAqIGFzIEF1ZGlvU291cmNlU2NoZW1hIGZyb20gJy4vQXVkaW9Tb3VyY2UuZ2VuJ1xuaW1wb3J0ICogYXMgQXZhdGFyQXR0YWNoU2NoZW1hIGZyb20gJy4vQXZhdGFyQXR0YWNoLmdlbidcbmltcG9ydCAqIGFzIEF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSBmcm9tICcuL0F2YXRhck1vZGlmaWVyQXJlYS5nZW4nXG5pbXBvcnQgKiBhcyBBdmF0YXJTaGFwZVNjaGVtYSBmcm9tICcuL0F2YXRhclNoYXBlLmdlbidcbmltcG9ydCAqIGFzIEJpbGxib2FyZFNjaGVtYSBmcm9tICcuL0JpbGxib2FyZC5nZW4nXG5pbXBvcnQgKiBhcyBCb3hTaGFwZVNjaGVtYSBmcm9tICcuL0JveFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIENhbWVyYU1vZGVTY2hlbWEgZnJvbSAnLi9DYW1lcmFNb2RlLmdlbidcbmltcG9ydCAqIGFzIENhbWVyYU1vZGVBcmVhU2NoZW1hIGZyb20gJy4vQ2FtZXJhTW9kZUFyZWEuZ2VuJ1xuaW1wb3J0ICogYXMgQ3lsaW5kZXJTaGFwZVNjaGVtYSBmcm9tICcuL0N5bGluZGVyU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgR0xURlNoYXBlU2NoZW1hIGZyb20gJy4vR0xURlNoYXBlLmdlbidcbmltcG9ydCAqIGFzIE1hdGVyaWFsU2NoZW1hIGZyb20gJy4vTWF0ZXJpYWwuZ2VuJ1xuaW1wb3J0ICogYXMgTWVzaENvbGxpZGVyU2NoZW1hIGZyb20gJy4vTWVzaENvbGxpZGVyLmdlbidcbmltcG9ydCAqIGFzIE1lc2hSZW5kZXJlclNjaGVtYSBmcm9tICcuL01lc2hSZW5kZXJlci5nZW4nXG5pbXBvcnQgKiBhcyBORlRTaGFwZVNjaGVtYSBmcm9tICcuL05GVFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlckRvd25TY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJEb3duLmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJEb3duUmVzdWx0LmdlbidcbmltcG9ydCAqIGFzIE9uUG9pbnRlclVwU2NoZW1hIGZyb20gJy4vT25Qb2ludGVyVXAuZ2VuJ1xuaW1wb3J0ICogYXMgT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEgZnJvbSAnLi9PblBvaW50ZXJVcFJlc3VsdC5nZW4nXG5pbXBvcnQgKiBhcyBQbGFuZVNoYXBlU2NoZW1hIGZyb20gJy4vUGxhbmVTaGFwZS5nZW4nXG5pbXBvcnQgKiBhcyBQb2ludGVyTG9ja1NjaGVtYSBmcm9tICcuL1BvaW50ZXJMb2NrLmdlbidcbmltcG9ydCAqIGFzIFNwaGVyZVNoYXBlU2NoZW1hIGZyb20gJy4vU3BoZXJlU2hhcGUuZ2VuJ1xuaW1wb3J0ICogYXMgVGV4dFNoYXBlU2NoZW1hIGZyb20gJy4vVGV4dFNoYXBlLmdlbidcbmltcG9ydCAqIGFzIFVpVGV4dFNjaGVtYSBmcm9tICcuL1VpVGV4dC5nZW4nXG5pbXBvcnQgKiBhcyBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hIGZyb20gJy4vVmlzaWJpbGl0eUNvbXBvbmVudC5nZW4nXG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVMaWJyYXJ5Q29tcG9uZW50cyh7XG4gIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWFcbn06IFBpY2s8SUVuZ2luZSwgJ2RlZmluZUNvbXBvbmVudEZyb21TY2hlbWEnPikge1xuICByZXR1cm4ge1xuXHRcdEFuaW1hdG9yOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEFuaW1hdG9yU2NoZW1hLkFuaW1hdG9yU2NoZW1hLCBBbmltYXRvclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF1ZGlvU291cmNlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hLCBBdWRpb1NvdXJjZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEF2YXRhckF0dGFjaDogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShBdmF0YXJBdHRhY2hTY2hlbWEuQXZhdGFyQXR0YWNoU2NoZW1hLCBBdmF0YXJBdHRhY2hTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRBdmF0YXJNb2RpZmllckFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkF2YXRhck1vZGlmaWVyQXJlYVNjaGVtYSwgQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QXZhdGFyU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQXZhdGFyU2hhcGVTY2hlbWEuQXZhdGFyU2hhcGVTY2hlbWEsIEF2YXRhclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0QmlsbGJvYXJkOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJpbGxib2FyZFNjaGVtYS5CaWxsYm9hcmRTY2hlbWEsIEJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdEJveFNoYXBlOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKEJveFNoYXBlU2NoZW1hLkJveFNoYXBlU2NoZW1hLCBCb3hTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdENhbWVyYU1vZGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZVNjaGVtYS5DYW1lcmFNb2RlU2NoZW1hLCBDYW1lcmFNb2RlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q2FtZXJhTW9kZUFyZWE6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEsIENhbWVyYU1vZGVBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0Q3lsaW5kZXJTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEsIEN5bGluZGVyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRHTFRGU2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoR0xURlNoYXBlU2NoZW1hLkdMVEZTaGFwZVNjaGVtYSwgR0xURlNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWF0ZXJpYWw6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEsIE1hdGVyaWFsU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0TWVzaENvbGxpZGVyOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE1lc2hDb2xsaWRlclNjaGVtYS5NZXNoQ29sbGlkZXJTY2hlbWEsIE1lc2hDb2xsaWRlclNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE1lc2hSZW5kZXJlcjogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hLCBNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRORlRTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShORlRTaGFwZVNjaGVtYS5ORlRTaGFwZVNjaGVtYSwgTkZUU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRPblBvaW50ZXJEb3duOiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKE9uUG9pbnRlckRvd25TY2hlbWEuT25Qb2ludGVyRG93blNjaGVtYSwgT25Qb2ludGVyRG93blNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdE9uUG9pbnRlckRvd25SZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYS5PblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLCBPblBvaW50ZXJEb3duUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyVXA6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyVXBTY2hlbWEuT25Qb2ludGVyVXBTY2hlbWEsIE9uUG9pbnRlclVwU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0T25Qb2ludGVyVXBSZXN1bHQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEuT25Qb2ludGVyVXBSZXN1bHRTY2hlbWEsIE9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0UGxhbmVTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShQbGFuZVNoYXBlU2NoZW1hLlBsYW5lU2hhcGVTY2hlbWEsIFBsYW5lU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRQb2ludGVyTG9jazogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShQb2ludGVyTG9ja1NjaGVtYS5Qb2ludGVyTG9ja1NjaGVtYSwgUG9pbnRlckxvY2tTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRTcGhlcmVTaGFwZTogZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShTcGhlcmVTaGFwZVNjaGVtYS5TcGhlcmVTaGFwZVNjaGVtYSwgU3BoZXJlU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEKSxcblx0XHRUZXh0U2hhcGU6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVGV4dFNoYXBlU2NoZW1hLlRleHRTaGFwZVNjaGVtYSwgVGV4dFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCksXG5cdFx0VWlUZXh0OiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFVpVGV4dFNjaGVtYS5VaVRleHRTY2hlbWEsIFVpVGV4dFNjaGVtYS5DT01QT05FTlRfSUQpLFxuXHRcdFZpc2liaWxpdHlDb21wb25lbnQ6IGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWEoVmlzaWJpbGl0eUNvbXBvbmVudFNjaGVtYS5WaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLCBWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLkNPTVBPTkVOVF9JRCksXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgSVNjaGVtYSB9IGZyb20gJy4uLy4uL3NjaGVtYXMvSVNjaGVtYSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiwgSUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZSdcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9JRCA9IDFcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybVR5cGUgPSB7XG4gIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXIgfVxuICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyOyB3OiBudW1iZXIgfVxuICBzY2FsZTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyIH1cbiAgcGFyZW50PzogRW50aXR5XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjb25zdCBUUkFOU0ZPUk1fTEVOR1RIID0gNDRcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybVNjaGVtYTogSVNjaGVtYTxUcmFuc2Zvcm1UeXBlPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBUcmFuc2Zvcm1UeXBlLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgY29uc3QgcHRyID0gYnVpbGRlci5pbmNyZW1lbnRXcml0ZU9mZnNldChUUkFOU0ZPUk1fTEVOR1RIKVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIsIHZhbHVlLnBvc2l0aW9uLngpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDQsIHZhbHVlLnBvc2l0aW9uLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDgsIHZhbHVlLnBvc2l0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDEyLCB2YWx1ZS5yb3RhdGlvbi54KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAxNiwgdmFsdWUucm90YXRpb24ueSlcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMjAsIHZhbHVlLnJvdGF0aW9uLnopXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDI0LCB2YWx1ZS5yb3RhdGlvbi53KVxuICAgIGJ1aWxkZXIuc2V0RmxvYXQzMihwdHIgKyAyOCwgdmFsdWUuc2NhbGUueClcbiAgICBidWlsZGVyLnNldEZsb2F0MzIocHRyICsgMzIsIHZhbHVlLnNjYWxlLnkpXG4gICAgYnVpbGRlci5zZXRGbG9hdDMyKHB0ciArIDM2LCB2YWx1ZS5zY2FsZS56KVxuICAgIGJ1aWxkZXIuc2V0VWludDMyKHB0ciArIDQwLCB2YWx1ZS5wYXJlbnQgfHwgMClcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVHJhbnNmb3JtVHlwZSB7XG4gICAgY29uc3QgcHRyID0gcmVhZGVyLmluY3JlbWVudFJlYWRPZmZzZXQoVFJBTlNGT1JNX0xFTkdUSClcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyKSxcbiAgICAgICAgeTogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgNCksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDgpXG4gICAgICB9LFxuICAgICAgcm90YXRpb246IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMTIpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAxNiksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDIwKSxcbiAgICAgICAgdzogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjQpXG4gICAgICB9LFxuICAgICAgc2NhbGU6IHtcbiAgICAgICAgeDogcmVhZGVyLmdldEZsb2F0MzIocHRyICsgMjgpLFxuICAgICAgICB5OiByZWFkZXIuZ2V0RmxvYXQzMihwdHIgKyAzMiksXG4gICAgICAgIHo6IHJlYWRlci5nZXRGbG9hdDMyKHB0ciArIDM2KVxuICAgICAgfSxcbiAgICAgIHBhcmVudDogcmVhZGVyLmdldFVpbnQzMihwdHIgKyA0MCkgYXMgRW50aXR5XG4gICAgfVxuICB9LFxuICBjcmVhdGUoKTogVHJhbnNmb3JtVHlwZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAgfSxcbiAgICAgIHNjYWxlOiB7IHg6IDEsIHk6IDEsIHo6IDEgfSxcbiAgICAgIHJvdGF0aW9uOiB7IHg6IDAsIHk6IDAsIHo6IDAsIHc6IDEgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lVHJhbnNmb3JtQ29tcG9uZW50KHtcbiAgZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYVxufTogUGljazxJRW5naW5lLCAnZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSc+KTogQ29tcG9uZW50RGVmaW5pdGlvbjxcbiAgSVNjaGVtYTxUcmFuc2Zvcm1UeXBlPixcbiAgUGFydGlhbDxUcmFuc2Zvcm1UeXBlPlxuPiB7XG4gIHJldHVybiBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hKFRyYW5zZm9ybVNjaGVtYSwgQ09NUE9ORU5UX0lEKVxufVxuIiwiaW1wb3J0IHsgUHJlRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL3NjaGVtYXMvSVNjaGVtYSdcblxuaW1wb3J0IHsgZGVmaW5lTGlicmFyeUNvbXBvbmVudHMgfSBmcm9tICcuL2dlbmVyYXRlZC9pbmRleC5nZW4nXG5pbXBvcnQgKiBhcyBNZXNoUmVuZGVyZXJTY2hlbWEgZnJvbSAnLi9nZW5lcmF0ZWQvTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCB7IFBCTWVzaFJlbmRlcmVyIH0gZnJvbSAnLi9nZW5lcmF0ZWQvcGIvTWVzaFJlbmRlcmVyLmdlbidcbmltcG9ydCB7IGRlZmluZVRyYW5zZm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbGVnYWN5L1RyYW5zZm9ybSdcblxuZXhwb3J0IGVudW0gQ09NUE9ORU5UX0lEIHtcbiAgU1lOQyA9IDEwMDBcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFNka0NvbXBvbmVudHMgPSBSZXR1cm5UeXBlPHR5cGVvZiBkZWZpbmVTZGtDb21wb25lbnRzPlxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lU2RrQ29tcG9uZW50cyhlbmdpbmU6IFByZUVuZ2luZSkge1xuICBjb25zdCBhdXRvZ2VuZXJhdGVkQ29tcG9uZW50cyA9IGRlZmluZUxpYnJhcnlDb21wb25lbnRzKGVuZ2luZSlcbiAgZW5naW5lLnJlbW92ZUNvbXBvbmVudERlZmluaXRpb24oYXV0b2dlbmVyYXRlZENvbXBvbmVudHMuTWVzaFJlbmRlcmVyLl9pZClcbiAgcmV0dXJuIHtcbiAgICAuLi5hdXRvZ2VuZXJhdGVkQ29tcG9uZW50cyxcbiAgICBUcmFuc2Zvcm06IGRlZmluZVRyYW5zZm9ybUNvbXBvbmVudChlbmdpbmUpLFxuICAgIE1lc2hSZW5kZXJlcjogZW5naW5lLmRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE8XG4gICAgICBJU2NoZW1hPFBCTWVzaFJlbmRlcmVyPixcbiAgICAgIFBhcnRpYWw8UEJNZXNoUmVuZGVyZXI+XG4gICAgPihNZXNoUmVuZGVyZXJTY2hlbWEuTWVzaFJlbmRlcmVyU2NoZW1hLCBNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEKVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJQXJyYXk8VD4odHlwZTogSVNjaGVtYTxUPik6IElTY2hlbWE8QXJyYXk8VD4+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IEFycmF5PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBidWlsZGVyLndyaXRlVWludDMyKHZhbHVlLmxlbmd0aClcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICB0eXBlLnNlcmlhbGl6ZShpdGVtLCBidWlsZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogQXJyYXk8VD4ge1xuICAgICAgY29uc3QgbmV3QXJyYXk6IEFycmF5PFQ+ID0gW11cbiAgICAgIGNvbnN0IGxlbmd0aCA9IHJlYWRlci5yZWFkVWludDMyKClcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgbmV3QXJyYXkucHVzaCh0eXBlLmRlc2VyaWFsaXplKHJlYWRlcikpXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3QXJyYXlcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEJvb2w6IElTY2hlbWE8Ym9vbGVhbj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogYm9vbGVhbiwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVJbnQ4KHZhbHVlID8gMSA6IDApXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDgoKSA9PT0gMVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJRW51bTxUPih0eXBlOiBJU2NoZW1hPGFueT4pOiBJU2NoZW1hPFQ+IHtcbiAgcmV0dXJuIHtcbiAgICBzZXJpYWxpemUodmFsdWU6IFQsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICAgIHR5cGUuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgIH0sXG4gICAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogVCB7XG4gICAgICByZXR1cm4gdHlwZS5kZXNlcmlhbGl6ZShyZWFkZXIpXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICByZXR1cm4gdHlwZS5jcmVhdGUoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEZsb2F0MzI6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlRmxvYXQzMih2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRGbG9hdDMyKClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwLjBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEZsb2F0NjQ6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlRmxvYXQ2NCh2YWx1ZSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWRGbG9hdDY0KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwLjBcbiAgfVxufVxuIiwiaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vQnl0ZUJ1ZmZlcidcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuLi9JU2NoZW1hJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDY0OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDY0KEJpZ0ludCh2YWx1ZSkpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihyZWFkZXIucmVhZEludDY0KCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgSW50MzI6IElTY2hlbWE8bnVtYmVyPiA9IHtcbiAgc2VyaWFsaXplKHZhbHVlOiBudW1iZXIsIGJ1aWxkZXI6IEJ5dGVCdWZmZXIpOiB2b2lkIHtcbiAgICBidWlsZGVyLndyaXRlSW50MzIodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50MzIoKVxuICB9LFxuICBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEludDE2OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDE2KHZhbHVlKVxuICB9LFxuICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBudW1iZXIge1xuICAgIHJldHVybiByZWFkZXIucmVhZEludDE2KClcbiAgfSxcbiAgY3JlYXRlKCkge1xuICAgIHJldHVybiAwXG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBJbnQ4OiBJU2NoZW1hPG51bWJlcj4gPSB7XG4gIHNlcmlhbGl6ZSh2YWx1ZTogbnVtYmVyLCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgYnVpbGRlci53cml0ZUludDgodmFsdWUpXG4gIH0sXG4gIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkSW50OCgpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gMFxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4uL0lTY2hlbWEnXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY29uc3QgRmxhdFN0cmluZzogSVNjaGVtYTxzdHJpbmc+ID0ge1xuICBzZXJpYWxpemUodmFsdWU6IHN0cmluZywgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgIGJ1aWxkZXIud3JpdGVCdWZmZXIobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKSlcbiAgfSxcbiAgZGVzZXJpYWxpemUocmVhZGVyOiBCeXRlQnVmZmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHJlYWRlci5yZWFkQnVmZmVyKCkpXG4gIH0sXG4gIGNyZWF0ZSgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNvbnN0IEVjc1N0cmluZyA9IEZsYXRTdHJpbmdcbiIsImltcG9ydCB7IEJ5dGVCdWZmZXIgfSBmcm9tICcuLi9zZXJpYWxpemF0aW9uL0J5dGVCdWZmZXInXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi9JU2NoZW1hJ1xuaW1wb3J0IHsgVG9PcHRpb25hbCB9IGZyb20gJy4vdHlwaW5nJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVjIHtcbiAgW2tleTogc3RyaW5nXTogSVNjaGVtYVxufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0PFQgZXh0ZW5kcyBTcGVjPiA9IFRvT3B0aW9uYWw8e1xuICBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIElTY2hlbWFcbiAgICA/IFJldHVyblR5cGU8VFtLXVsnZGVzZXJpYWxpemUnXT5cbiAgICA6IFRbS10gZXh0ZW5kcyBTcGVjXG4gICAgPyBSZXN1bHQ8VFtLXT5cbiAgICA6IG5ldmVyXG59PlxuXG5leHBvcnQgdHlwZSBNYXBTY2hlbWFUeXBlPFQgZXh0ZW5kcyBTcGVjPiA9IElTY2hlbWE8UmVzdWx0PFQ+PlxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElNYXA8VCBleHRlbmRzIFNwZWM+KHNwZWM6IFQpOiBJU2NoZW1hPFJlc3VsdDxUPj4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogUmVzdWx0PFQ+LCBidWlsZGVyOiBCeXRlQnVmZmVyKTogdm9pZCB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICBzcGVjW2tleV0uc2VyaWFsaXplKCh2YWx1ZSBhcyBhbnkpW2tleV0sIGJ1aWxkZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBkZXNlcmlhbGl6ZShyZWFkZXI6IEJ5dGVCdWZmZXIpOiBSZXN1bHQ8VD4ge1xuICAgICAgY29uc3QgbmV3VmFsdWU6IFJlc3VsdDxUPiA9IHt9IGFzIGFueVxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gc3BlYykge1xuICAgICAgICAvLyBUT0RPOiBhcyBhbnlcbiAgICAgICAgOyhuZXdWYWx1ZSBhcyBhbnkpW2tleV0gPSBzcGVjW2tleV0uZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZTogUmVzdWx0PFQ+ID0ge30gYXMgYW55XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzcGVjKSB7XG4gICAgICAgIC8vIFRPRE86IGFzIGFueVxuICAgICAgICA7KG5ld1ZhbHVlIGFzIGFueSlba2V5XSA9IHNwZWNba2V5XS5jcmVhdGUoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgSVNjaGVtYSB9IGZyb20gJy4vSVNjaGVtYSdcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJT3B0aW9uYWw8VD4oc3BlYzogSVNjaGVtYTxUPik6IElTY2hlbWE8VCB8IHVuZGVmaW5lZD4ge1xuICByZXR1cm4ge1xuICAgIHNlcmlhbGl6ZSh2YWx1ZTogVCB8IHVuZGVmaW5lZCwgYnVpbGRlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGJ1aWxkZXIud3JpdGVJbnQ4KDEpXG4gICAgICAgIHNwZWMuc2VyaWFsaXplKHZhbHVlLCBidWlsZGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVpbGRlci53cml0ZUludDgoMClcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlc2VyaWFsaXplKHJlYWRlcjogQnl0ZUJ1ZmZlcik6IFQgfCB1bmRlZmluZWQge1xuICAgICAgY29uc3QgZXhpc3RzID0gcmVhZGVyLnJlYWRJbnQ4KClcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVzZXJpYWxpemUocmVhZGVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUFycmF5IH0gZnJvbSAnLi9BcnJheSdcbmltcG9ydCB7IEJvb2wgfSBmcm9tICcuL2Jhc2ljL0Jvb2xlYW4nXG5pbXBvcnQgeyBJRW51bSB9IGZyb20gJy4vYmFzaWMvRW51bSdcbmltcG9ydCB7IEZsb2F0MzIsIEZsb2F0NjQgfSBmcm9tICcuL2Jhc2ljL0Zsb2F0J1xuaW1wb3J0IHsgSW50MTYsIEludDMyLCBJbnQ4LCBJbnQ2NCBhcyBpSW50NjQgfSBmcm9tICcuL2Jhc2ljL0ludGVnZXInXG5pbXBvcnQgeyBFY3NTdHJpbmcgfSBmcm9tICcuL2Jhc2ljL1N0cmluZydcbmltcG9ydCB7IElTY2hlbWEgfSBmcm9tICcuL0lTY2hlbWEnXG5pbXBvcnQgeyBJTWFwIH0gZnJvbSAnLi9NYXAnXG5pbXBvcnQgeyBJT3B0aW9uYWwgfSBmcm9tICcuL09wdGlvbmFsJ1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBTY2hlbWFzIHtcbiAgZXhwb3J0IHR5cGUgU2NoZW1hVHlwZSA9IElTY2hlbWFcblxuICBleHBvcnQgY29uc3QgQm9vbGVhbiA9IEJvb2xcblxuICBleHBvcnQgY29uc3QgU3RyaW5nID0gRWNzU3RyaW5nXG5cbiAgZXhwb3J0IGNvbnN0IEZsb2F0ID0gRmxvYXQzMlxuICBleHBvcnQgY29uc3QgRG91YmxlID0gRmxvYXQ2NFxuXG4gIGV4cG9ydCBjb25zdCBCeXRlID0gSW50OFxuICBleHBvcnQgY29uc3QgU2hvcnQgPSBJbnQxNlxuICBleHBvcnQgY29uc3QgSW50ID0gSW50MzJcbiAgZXhwb3J0IGNvbnN0IEludDY0ID0gaUludDY0XG5cbiAgZXhwb3J0IGNvbnN0IE51bWJlciA9IEZsb2F0MzJcblxuICBleHBvcnQgY29uc3QgRW51bSA9IElFbnVtXG4gIGV4cG9ydCBjb25zdCBBcnJheSA9IElBcnJheVxuICBleHBvcnQgY29uc3QgTWFwID0gSU1hcFxuICBleHBvcnQgY29uc3QgT3B0aW9uYWwgPSBJT3B0aW9uYWxcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuY3JkdFByb3RvY29sID0gZXhwb3J0cy5zdGF0ZUl0ZXJhdG9yID0gZXhwb3J0cy5zYW1lRGF0YSA9IHZvaWQgMDtcbl9fZXhwb3J0U3RhcihyZXF1aXJlKFwiLi90eXBlc1wiKSwgZXhwb3J0cyk7XG4vKipcbiAqIENvbXBhcmUgcmF3IGRhdGEuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc2FtZURhdGEoYSwgYikge1xuICAgIC8vIEF0IHJlZmVyZW5jZSBsZXZlbFxuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgJiYgYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgaWYgKGEuYnl0ZUxlbmd0aCAhPT0gYi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChnbG9iYWxUaGlzLkJ1ZmZlcikge1xuICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIEJ1ZmZlciAmJiBiIGluc3RhbmNlb2YgQnVmZmVyKSB7XG4gICAgICAgICAgICAvLyBEZWVwIGxldmVsXG4gICAgICAgICAgICByZXR1cm4gYS5lcXVhbHMoYik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0cy5zYW1lRGF0YSA9IHNhbWVEYXRhO1xuLyoqXG4gKiBTdGF0ZSBpdGVyYXRvclxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uKiBzdGF0ZUl0ZXJhdG9yKHN0YXRlKSB7XG4gICAgZm9yIChjb25zdCBba2V5MSwgdmFsdWUxXSBvZiBzdGF0ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiB2YWx1ZTEuZW50cmllcygpKSB7XG4gICAgICAgICAgICB5aWVsZCBba2V5MSwga2V5MiwgdmFsdWUyXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydHMuc3RhdGVJdGVyYXRvciA9IHN0YXRlSXRlcmF0b3I7XG4vKipcbiAqIEBwdWJsaWNcbiAqIENSRFQgcHJvdG9jb2wuXG4gKiBTdG9yZXMgdGhlIGxhdGVzdCBzdGF0ZSwgYW5kIGRlY2lkZXMgd2hlbmV2ZXIgd2UgaGF2ZVxuICogdG8gcHJvY2VzcyBhbmQgc3RvcmUgdGhlIG5ldyBkYXRhIGluIGNhc2UgaXRzIGFuIHVwZGF0ZSwgb3JcbiAqIHRvIGRpc2NhcmQgYW5kIHNlbmQgb3VyIGxvY2FsIHZhbHVlIGNhdXNlIHJlbW90ZSBpdCdzIG91dGRhdGVkLlxuICovXG5mdW5jdGlvbiBjcmR0UHJvdG9jb2woKSB7XG4gICAgLyoqXG4gICAgICogTG9jYWwgc3RhdGUgd2hlcmUgd2Ugc3RvcmUgdGhlIGxhdGVzdCBsYW1wb3J0IHRpbWVzdGFtcFxuICAgICAqIGFuZCB0aGUgcmF3IGRhdGEgdmFsdWVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBXZSBzaG91bGQgY2FsbCB0aGlzIGZuIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgc3RhdGVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCByZW1vdGVUaW1lc3RhbXApIHtcbiAgICAgICAgY29uc3Qga2V5MVZhbHVlID0gc3RhdGUuZ2V0KGtleTEpO1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBNYXRoLm1heChyZW1vdGVUaW1lc3RhbXAsIGtleTFWYWx1ZT8uZ2V0KGtleTIpPy50aW1lc3RhbXAgfHwgMCk7XG4gICAgICAgIGlmIChrZXkxVmFsdWUpIHtcbiAgICAgICAgICAgIGtleTFWYWx1ZS5zZXQoa2V5MiwgeyB0aW1lc3RhbXAsIGRhdGEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdLZXkxVmFsdWUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBuZXdLZXkxVmFsdWUuc2V0KGtleTIsIHsgdGltZXN0YW1wLCBkYXRhIH0pO1xuICAgICAgICAgICAgc3RhdGUuc2V0KGtleTEsIG5ld0tleTFWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdGltZXN0YW1wLCBkYXRhIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBldmVudCBmb3IgdGhlIHNwZWNpZmllZCBrZXkgYW5kIHN0b3JlIHRoZSBuZXcgZGF0YSBhbmRcbiAgICAgKiBsYW1wb3J0IHRpbWVzdG1hcCBpbmNyZW1lbnRlZCBieSBvbmUgaW4gdGhlIHN0YXRlLlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChrZXkxLCBrZXkyLCBkYXRhKSB7XG4gICAgICAgIC8vIEluY3JlbWVudCB0aGUgdGltZXN0YW1wXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IChzdGF0ZS5nZXQoa2V5MSk/LmdldChrZXkyKT8udGltZXN0YW1wIHx8IDApICsgMTtcbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKTtcbiAgICAgICAgcmV0dXJuIHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIHJlY2VpdmVkIG1lc3NhZ2Ugb25seSBpZiB0aGUgbGFtcG9ydCBudW1iZXIgcmVjaWV2ZWQgaXMgaGlnaGVyXG4gICAgICogdGhhbiB0aGUgc3RvcmVkIG9uZS4gSWYgaXRzIGxvd2VyLCB3ZSBzcHJlYWQgaXQgdG8gdGhlIG5ldHdvcmsgdG8gY29ycmVjdCB0aGUgcGVlci5cbiAgICAgKiBJZiB0aGV5IGFyZSBlcXVhbCwgdGhlIGJpZ2dlciByYXcgZGF0YSB3aW5zLlxuICBcbiAgICAgKiBSZXR1cm5zIHRoZSByZWNpZXZlZCBkYXRhIGlmIHRoZSBsYW1wb3J0IG51bWJlciB3YXMgYmlnZ2VyIHRoYW4gb3Vycy5cbiAgICAgKiBJZiBpdCB3YXMgYW4gb3V0ZGF0ZWQgbWVzc2FnZSwgdGhlbiB3ZSByZXR1cm4gdm9pZFxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZXNzTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IHsga2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuZ2V0KGtleTEpPy5nZXQoa2V5Mik7XG4gICAgICAgIC8vIFRoZSByZWNlaXZlZCBtZXNzYWdlIGlzID4gdGhhbiBvdXIgY3VycmVudCB2YWx1ZSwgdXBkYXRlIG91ciBzdGF0ZS5cbiAgICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudGltZXN0YW1wIDwgdGltZXN0YW1wKSB7XG4gICAgICAgICAgICB1cGRhdGVTdGF0ZShrZXkxLCBrZXkyLCBkYXRhLCB0aW1lc3RhbXApO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3V0ZGF0ZWQgTWVzc2FnZS4gUmVzZW5kIG91ciBzdGF0ZSBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmUuXG4gICAgICAgIGlmIChjdXJyZW50LnRpbWVzdGFtcCA+IHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXkxLFxuICAgICAgICAgICAgICAgIGtleTIsXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2FtZSBkYXRhLCBzYW1lIHRpbWVzdGFtcC4gV2VpcmRvIGVjaG8gbWVzc2FnZS5cbiAgICAgICAgaWYgKHNhbWVEYXRhKGN1cnJlbnQuZGF0YSwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJhY2UgY29uZGl0aW9uLCBzYW1lIHRpbWVzdGFtcCBkaWZmIGRhdGEuXG4gICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVEYXRhKGN1cnJlbnQsIGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZURhdGEoY3VycmVudC5kYXRhLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBrZXkxLFxuICAgICAgICAgICAgICAgIGtleTIsXG4gICAgICAgICAgICAgICAgZGF0YTogY3VycmVudC5kYXRhLFxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogY3VycmVudC50aW1lc3RhbXBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU3RhdGUoa2V5MSwga2V5MiwgZGF0YSwgdGltZXN0YW1wKS5kYXRhO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZVxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjcmVhdGVFdmVudCxcbiAgICAgICAgcHJvY2Vzc01lc3NhZ2UsXG4gICAgICAgIGdldFN0YXRlXG4gICAgfTtcbn1cbmV4cG9ydHMuY3JkdFByb3RvY29sID0gY3JkdFByb3RvY29sO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBUYWtlIHRoZSBtYXggYmV0d2VlbiBjdXJyZW50U2l6ZSBhbmQgaW50ZW5kZWRTaXplIGFuZCB0aGVuIHBsdXMgMTAyNC4gVGhlbixcbiAqICBmaW5kIHRoZSBuZXh0IG5lYXJlciBtdWx0aXBsZSBvZiAxMDI0LlxuICogQHBhcmFtIGN1cnJlbnRTaXplIC0gbnVtYmVyXG4gKiBAcGFyYW0gaW50ZW5kZWRTaXplIC0gbnVtYmVyXG4gKiBAcmV0dXJucyB0aGUgY2FsY3VsYXRlZCBudW1iZXJcbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dFNpemUoY3VycmVudFNpemU6IG51bWJlciwgaW50ZW5kZWRTaXplOiBudW1iZXIpIHtcbiAgY29uc3QgbWluTmV3U2l6ZSA9IE1hdGgubWF4KGN1cnJlbnRTaXplLCBpbnRlbmRlZFNpemUpICsgMTAyNFxuICByZXR1cm4gTWF0aC5jZWlsKG1pbk5ld1NpemUgLyAxMDI0KSAqIDEwMjRcbn1cblxuLyoqXG4gKiBAcGFyYW0gd3JpdGluZyAtIHdyaXRpbmcgb3B0aW9uLCBzZWUgb2JqZWN0IHNwZWNzLlxuICogQHBhcmFtIHJlYWRpbmcgLSByZWFkaW5nIG9wdGlvbiwgc2VlIG9iamVjdCBzcGVjcy5cbiAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgLSBJbml0aWFsIGNhcGFjaXR5IG9mIGJ1ZmZlciB0byBhbGxvY2F0ZSwgaWdub3JlZCBpZiB5b3UgdXNlIHdyaXRpbmcgb3IgcmVhZGluZyBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQnl0ZUJ1ZmZlck9wdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIGJ1ZmZlciAtIGEgYnVmZmVyIGFscmVhZHkgYWxsb2NhdGVkIHRvIHJlYWQgZnJvbSB0aGVyZS5cbiAgICogQHBhcmFtIGN1cnJlbnRPZmZzZXQgLSBzZXQgdGhlIGN1cnNvciB3aGVyZSBiZWdpbnMgdG8gcmVhZC4gRGVmYXVsdCAwXG4gICAqIEBwYXJhbSBsZW5ndGggLSBkZWxpbWl0ZSB3aGVyZSB0aGUgdmFsaWQgZGF0YSBlbmRzLiBEZWZhdWx0OiBidWZmZXIubGVuZ3RoXG4gICAqL1xuICByZWFkaW5nPzoge1xuICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIGxlbmd0aD86IG51bWJlclxuICAgIGN1cnJlbnRPZmZzZXQ6IG51bWJlclxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBidWZmZXIgLSBhIGJ1ZmZlciBhbHJlYWR5IGFsbG9jYXRlZCB0byB3cml0ZSB0aGVyZS5cbiAgICogQHBhcmFtIGN1cnJlbnRPZmZzZXQgLSBzZXQgdGhlIGN1cnNvciB0byBub3Qgc3RhcnQgd3JpdGluZyBmcm9tIHRoZSBiZWdpbiBvZiBpdC4gRGVmYXVsdCAwXG4gICAqL1xuICB3cml0aW5nPzoge1xuICAgIGJ1ZmZlcjogVWludDhBcnJheVxuICAgIGN1cnJlbnRPZmZzZXQ/OiBudW1iZXJcbiAgfVxuXG4gIGluaXRpYWxDYXBhY2l0eT86IG51bWJlclxufVxuXG5jb25zdCBkZWZhdWx0SW5pdGlhbENhcGFjaXR5ID0gMTAyNDBcblxuLyoqXG4gKiBCeXRlQnVmZmVyIGlzIGEgd3JhcHBlciBvZiBEYXRhVmlldyB3aGljaCBhbHNvIGFkZHMgYSByZWFkIGFuZCB3cml0ZSBvZmZzZXQuXG4gKiAgQWxzbyBpbiBhIHdyaXRlIG9wZXJhdGlvbiBpdCByZXNpemVzIHRoZSBidWZmZXIgaXMgYmVpbmcgdXNlZCBpZiBpdCBuZWVkcy5cbiAqXG4gKiAtIFVzZSByZWFkIGFuZCB3cml0ZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvciBjb25zdW1lIGRhdGEuXG4gKiAtIFVzZSBzZXQgYW5kIGdldCBvbmx5IGlmIHlvdSBhcmUgc3VyZSB0aGF0IHlvdSdyZSBkb2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ5dGVCdWZmZXIob3B0aW9uczogQ3JlYXRlQnl0ZUJ1ZmZlck9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbml0aWFsUk9mZnNldDogbnVtYmVyID0gb3B0aW9ucy5yZWFkaW5nPy5jdXJyZW50T2Zmc2V0IHx8IDBcbiAgbGV0IGluaXRpYWxCdWZmZXI6IFVpbnQ4QXJyYXkgfCBudWxsID0gbnVsbFxuICBsZXQgaW5pdGlhbFdPZmZzZXQ6IG51bWJlciA9IDBcblxuICBpZiAob3B0aW9ucy53cml0aW5nKSB7XG4gICAgaW5pdGlhbEJ1ZmZlciA9IG9wdGlvbnMud3JpdGluZy5idWZmZXJcbiAgICBpZiAob3B0aW9ucy53cml0aW5nLmN1cnJlbnRPZmZzZXQpIHtcbiAgICAgIGluaXRpYWxXT2Zmc2V0ID0gb3B0aW9ucy53cml0aW5nLmN1cnJlbnRPZmZzZXRcbiAgICB9XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5yZWFkaW5nKSB7XG4gICAgaW5pdGlhbEJ1ZmZlciA9IG9wdGlvbnMucmVhZGluZy5idWZmZXJcbiAgICBpbml0aWFsV09mZnNldCA9IG9wdGlvbnMucmVhZGluZy5sZW5ndGggfHwgb3B0aW9ucy5yZWFkaW5nLmJ1ZmZlci5sZW5ndGhcbiAgfSBlbHNlIHtcbiAgICBpbml0aWFsQnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBvcHRpb25zLmluaXRpYWxDYXBhY2l0eSB8fCBkZWZhdWx0SW5pdGlhbENhcGFjaXR5XG4gICAgKVxuICB9XG5cbiAgbGV0IGJ1ZmZlcjogVWludDhBcnJheSA9IGluaXRpYWxCdWZmZXIhXG4gIGxldCB2aWV3OiBEYXRhVmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldClcbiAgbGV0IHdvZmZzZXQ6IG51bWJlciA9IGluaXRpYWxXT2Zmc2V0XG4gIGxldCByb2Zmc2V0OiBudW1iZXIgPSBpbml0aWFsUk9mZnNldFxuXG4gIC8qKlxuICAgKiBJbmNyZWVtZW50IHRoZSB3cml0ZSBvZmZzZXQgYW5kIHJlc2l6ZSB0aGUgYnVmZmVyIGlmIGl0IG5lZWRzLlxuICAgKi9cbiAgY29uc3Qgd29BZGQgPSAoYW1vdW50OiBudW1iZXIpID0+IHtcbiAgICBpZiAod29mZnNldCArIGFtb3VudCA+IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICBjb25zdCBuZXdzaXplID0gZ2V0TmV4dFNpemUoYnVmZmVyLmJ5dGVMZW5ndGgsIHdvZmZzZXQgKyBhbW91bnQpXG4gICAgICBjb25zdCBuZXdCdWZmZXIgPSBuZXcgVWludDhBcnJheShuZXdzaXplKVxuICAgICAgbmV3QnVmZmVyLnNldChidWZmZXIpXG4gICAgICBidWZmZXIgPSBuZXdCdWZmZXJcbiAgICAgIHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlcilcbiAgICB9XG5cbiAgICB3b2Zmc2V0ICs9IGFtb3VudFxuICAgIHJldHVybiB3b2Zmc2V0IC0gYW1vdW50XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVtZW50IHRoZSByZWFkIG9mZnNldCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyB0cnlpbmcgdG8gcmVhZFxuICAgKiAgb3V0c2lkZSB0aGUgYm91bmRzLlxuICAgKi9cbiAgY29uc3Qgcm9BZGQgPSAoYW1vdW50OiBudW1iZXIpID0+IHtcbiAgICBpZiAocm9mZnNldCArIGFtb3VudCA+IHdvZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT3V0c2lkZSBvZiB0aGUgYm91bmRzIG9mIHdyaXRlbiBkYXRhLicpXG4gICAgfVxuXG4gICAgcm9mZnNldCArPSBhbW91bnRcbiAgICByZXR1cm4gcm9mZnNldCAtIGFtb3VudFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBUaGUgZW50aXJlIGN1cnJlbnQgVWludDhBcnJheS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IGlmIHRoZSBidWZmZXIgZ3Jvd3MsIHRoZSB2aWV3IGhhZCBjaGFuZ2VkIGl0c2VsZixcbiAgICAgKiAgYW5kIHRoZSByZWZlcmVuY2Ugd2lsbCBiZSBhIGludmFsaWQgb25lLlxuICAgICAqL1xuICAgIGJ1ZmZlcigpOiBVaW50OEFycmF5IHtcbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBjYXBhY2l0eSBvZiB0aGUgY3VycmVudCBidWZmZXJcbiAgICAgKi9cbiAgICBidWZmZXJMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBidWZmZXIubGVuZ3RoXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXNldHMgYnl0ZUJ1ZmZlciB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICAgKi9cbiAgICByZXNldEJ1ZmZlcigpOiB2b2lkIHtcbiAgICAgIHJvZmZzZXQgPSAwXG4gICAgICB3b2Zmc2V0ID0gMFxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcmVhZCBvZmZzZXRcbiAgICAgKi9cbiAgICBjdXJyZW50UmVhZE9mZnNldCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHJvZmZzZXRcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHdyaXRlIG9mZnNldFxuICAgICAqL1xuICAgIGN1cnJlbnRXcml0ZU9mZnNldCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvZmZzZXRcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlYWRpbmcgcHVycG9zZVxuICAgICAqIFJldHVybnMgdGhlIHByZXZpdW9zIG9mZnNzZXQgc2l6ZSBiZWZvcmUgaW5jcmVtZW50aW5nXG4gICAgICovXG4gICAgaW5jcmVtZW50UmVhZE9mZnNldChhbW91bnQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gcm9BZGQoYW1vdW50KVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgSG93IG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZSB0byByZWFkLlxuICAgICAqL1xuICAgIHJlbWFpbmluZ0J5dGVzKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gd29mZnNldCAtIHJvZmZzZXRcbiAgICB9LFxuICAgIHJlYWRGbG9hdDMyKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDMyKHJvQWRkKDQpKVxuICAgIH0sXG4gICAgcmVhZEZsb2F0NjQoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEZsb2F0NjQocm9BZGQoOCkpXG4gICAgfSxcbiAgICByZWFkSW50OCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50OChyb0FkZCgxKSlcbiAgICB9LFxuICAgIHJlYWRJbnQxNigpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MTYocm9BZGQoMikpXG4gICAgfSxcbiAgICByZWFkSW50MzIoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDMyKHJvQWRkKDQpKVxuICAgIH0sXG4gICAgcmVhZEludDY0KCk6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdJbnQ2NChyb0FkZCg4KSlcbiAgICB9LFxuICAgIHJlYWRVaW50OCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDgocm9BZGQoMSkpXG4gICAgfSxcbiAgICByZWFkVWludDE2KCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MTYocm9BZGQoMikpXG4gICAgfSxcbiAgICByZWFkVWludDMyKCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRVaW50MzIocm9BZGQoNCkpXG4gICAgfSxcbiAgICByZWFkVWludDY0KCk6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdVaW50NjQocm9BZGQoOCkpXG4gICAgfSxcbiAgICByZWFkQnVmZmVyKCkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdmlldy5nZXRVaW50MzIocm9BZGQoNCkpXG4gICAgICByZXR1cm4gYnVmZmVyLnN1YmFycmF5KHJvQWRkKGxlbmd0aCksIHJvQWRkKDApKVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogV3JpdGluZyBwdXJwb3NlXG4gICAgICovXG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50IG9mZnNldFxuICAgICAqIEBwYXJhbSBhbW91bnQgLSBob3cgbWFueSBieXRlc1xuICAgICAqIEByZXR1cm5zIFRoZSBvZmZzZXQgd2hlbiB0aGlzIHJlc2VydmluZyBzdGFydHMuXG4gICAgICovXG4gICAgaW5jcmVtZW50V3JpdGVPZmZzZXQoYW1vdW50OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvQWRkKGFtb3VudClcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdGVuIGluIHRoZSBidWZmZXIuXG4gICAgICovXG4gICAgc2l6ZSgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHdvZmZzZXRcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRha2UgY2FyZSB1c2luZyB0aGlzIGZ1bmN0aW9uLCBpZiB5b3UgbW9kaWZ5IHRoZSBkYXRhIGFmdGVyLCB0aGVcbiAgICAgKiByZXR1cm5lZCBzdWJhcnJheSB3aWxsIGNoYW5nZSB0b28uIElmIHlvdSdsbCBtb2RpZnkgdGhlIGNvbnRlbnQgb2YgdGhlXG4gICAgICogYnl0ZWJ1ZmZlciwgbWF5YmUgeW91IHdhbnQgdG8gdXNlIHRvQ29waWVkQmluYXJ5KClcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBzdWJhcnJheSBmcm9tIDAgdG8gb2Zmc2V0IGFzIHJlZmVyZW5jZS5cbiAgICAgKi9cbiAgICB0b0JpbmFyeSgpIHtcbiAgICAgIHJldHVybiBidWZmZXIuc3ViYXJyYXkoMCwgd29mZnNldClcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2FmZSBjb3BpZWQgYnVmZmVyIG9mIHRoZSBjdXJyZW50IGRhdGEgb2YgQnl0ZUJ1ZmZlclxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHN1YmFycmF5IGZyb20gMCB0byBvZmZzZXQuXG4gICAgICovXG4gICAgdG9Db3BpZWRCaW5hcnkoKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkodGhpcy50b0JpbmFyeSgpKVxuICAgIH0sXG5cbiAgICB3cml0ZUJ1ZmZlcih2YWx1ZTogVWludDhBcnJheSwgd3JpdGVMZW5ndGg6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICBpZiAod3JpdGVMZW5ndGgpIHtcbiAgICAgICAgdGhpcy53cml0ZVVpbnQzMih2YWx1ZS5ieXRlTGVuZ3RoKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvID0gd29BZGQodmFsdWUuYnl0ZUxlbmd0aClcbiAgICAgIGJ1ZmZlci5zZXQodmFsdWUsIG8pXG4gICAgfSxcbiAgICB3cml0ZUZsb2F0MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldEZsb2F0MzIobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUZsb2F0NjQodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEZsb2F0NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDgodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDEpXG4gICAgICB2aWV3LnNldEludDgobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZUludDE2KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgyKVxuICAgICAgdmlldy5zZXRJbnQxNihvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlSW50MzIodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDQpXG4gICAgICB2aWV3LnNldEludDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVJbnQ2NCh2YWx1ZTogYmlnaW50KTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoOClcbiAgICAgIHZpZXcuc2V0QmlnSW50NjQobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQ4KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgxKVxuICAgICAgdmlldy5zZXRVaW50OChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIHdyaXRlVWludDE2KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG8gPSB3b0FkZCgyKVxuICAgICAgdmlldy5zZXRVaW50MTYobywgdmFsdWUpXG4gICAgfSxcbiAgICB3cml0ZVVpbnQzMih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICBjb25zdCBvID0gd29BZGQoNClcbiAgICAgIHZpZXcuc2V0VWludDMyKG8sIHZhbHVlKVxuICAgIH0sXG4gICAgd3JpdGVVaW50NjQodmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgY29uc3QgbyA9IHdvQWRkKDgpXG4gICAgICB2aWV3LnNldEJpZ1VpbnQ2NChvLCB2YWx1ZSlcbiAgICB9LFxuICAgIC8vIERhdGF2aWV3IFByb3h5XG4gICAgZ2V0RmxvYXQzMihvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICByZXR1cm4gdmlldy5nZXRGbG9hdDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldEZsb2F0NjQob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0RmxvYXQ2NChvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRJbnQ4KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldEludDgob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50MTYob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MTYob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0SW50MzIob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0SW50NjQob2Zmc2V0OiBudW1iZXIpOiBiaWdpbnQge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0QmlnSW50NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDgob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDgob2Zmc2V0KVxuICAgIH0sXG4gICAgZ2V0VWludDE2KG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB2aWV3LmdldFVpbnQxNihvZmZzZXQpXG4gICAgfSxcbiAgICBnZXRVaW50MzIob2Zmc2V0OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHZpZXcuZ2V0VWludDMyKG9mZnNldClcbiAgICB9LFxuICAgIGdldFVpbnQ2NChvZmZzZXQ6IG51bWJlcik6IGJpZ2ludCB7XG4gICAgICByZXR1cm4gdmlldy5nZXRCaWdVaW50NjQob2Zmc2V0KVxuICAgIH0sXG4gICAgc2V0RmxvYXQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRGbG9hdDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRGbG9hdDY0KG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEZsb2F0NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDgob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50OChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0SW50MTYob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0SW50MTYob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldEludDMyKG9mZnNldDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICB2aWV3LnNldEludDMyKG9mZnNldCwgdmFsdWUpXG4gICAgfSxcbiAgICBzZXRJbnQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgdmlldy5zZXRCaWdJbnQ2NChvZmZzZXQsIHZhbHVlKVxuICAgIH0sXG4gICAgc2V0VWludDgob2Zmc2V0OiBudW1iZXIsIHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQxNihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50MTYob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQzMihvZmZzZXQ6IG51bWJlciwgdmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgdmlldy5zZXRVaW50MzIob2Zmc2V0LCB2YWx1ZSlcbiAgICB9LFxuICAgIHNldFVpbnQ2NChvZmZzZXQ6IG51bWJlciwgdmFsdWU6IGJpZ2ludCk6IHZvaWQge1xuICAgICAgdmlldy5zZXRCaWdVaW50NjQob2Zmc2V0LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEJ5dGVCdWZmZXIgPSBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVCeXRlQnVmZmVyPlxuIiwiLyoqXG4gKiBUaGUgd2lyZSBtZXNzYWdlIGlzIHRoZSB0b3AtbGV2ZWwgbWVzc2FnZSB0aGF0IGNhbiBiZSBwYWNrZWRcbiAqICBpbnNpZGUgaXQgY2FuIGNvbnRhaW4gYSBkYXRhIHdpdGggYW5vdGhlciBzdHJ1Y3R1cmUgb3IgcHJvdG9jb2xcbiAqXG4gKiBFYWNoIHdpcmUgbWVzc2FnZSBoYXMgdGhyZWUgcHJpbWl0aXZlIHByb3BlcnR5IHRoYXQgaXQnbGwgbmV2ZXIgY2hhbmdlXG4gKiAgIC0tLT4gbGVuZ3RoICAgICAgICB1aW50MzIgKG1lc3NhZ2Ugc2l6ZSB1cCB0byA0LDI5NCw5NjcsMjk1KVxuICogICAtLS0+IHZlcnNpb24gICAgICAgdWludDMyIChmb3Igbm93IGp1c3QgYSBudW1iZXIgd2hpY2ggaXMgemVybylcbiAqICAgLS0tPiBtZXNzYWdlIHR5cGUgIHVpbnQzMlxuICogVGhlIGxlbmd0aCBpbmRpY2F0ZXMgaG93IG1hbnkgYnl0ZXMgYXJlIGFib3ZlIHNlbGYsIHRoZSB2ZXJzaW9uIGluXG4gKiBjb21iaW5hdGlvbiB3aXRoIG1lc3NhZ2UgdHlwZSBkZWZpbmVzIHRoZSBzZXQgb2YgaGFuZGxlcnMgdGhhdCB3aWxsIGJlXG4gKiBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGUgbWVzc2FnZVxuICpcbiAqL1xuXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi9CeXRlQnVmZmVyJ1xuXG50eXBlIFVpbnQzMiA9IG51bWJlclxuXG5leHBvcnQgbmFtZXNwYWNlIFdpcmVNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gRW51bSB7XG4gICAgUkVTRVJWRUQgPSAwLFxuXG4gICAgLy8gQ29tcG9uZW50IE9wZXJhdGlvblxuICAgIFBVVF9DT01QT05FTlQgPSAxLFxuICAgIERFTEVURV9DT01QT05FTlQgPSAyLFxuXG4gICAgTUFYX01FU1NBR0VfVFlQRVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBsZW5ndGggLSBVaW50MzIgdGhlIGxlbmd0aCBvZiBhbGwgbWVzc2FnZSAoaW5jbHVkaW5nIHRoZSBoZWFkZXIpXG4gICAqIEBwYXJhbSB0eXBlIC0gZGVmaW5lIHRoZSBmdW5jdGlvbiB3aGljaCBoYW5kbGVzIHRoZSBkYXRhXG4gICAqL1xuICBleHBvcnQgdHlwZSBIZWFkZXIgPSB7XG4gICAgbGVuZ3RoOiBVaW50MzJcbiAgICB0eXBlOiBVaW50MzJcbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBIRUFERVJfTEVOR1RIID0gOFxuICAvKipcbiAgICogVmFsaWRhdGUgaWYgdGhlIG1lc3NhZ2UgaW5jb21pbmcgaXMgY29tcGxldGVkXG4gICAqIEBwYXJhbSBidWYgLSBCeXRlQnVmZmVyXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoYnVmOiBCeXRlQnVmZmVyKSB7XG4gICAgY29uc3QgcmVtID0gYnVmLnJlbWFpbmluZ0J5dGVzKClcbiAgICBpZiAocmVtIDwgSEVBREVSX0xFTkdUSCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZUxlbmd0aCA9IGJ1Zi5nZXRVaW50MzIoYnVmLmN1cnJlbnRSZWFkT2Zmc2V0KCkpXG4gICAgaWYgKHJlbSA8IG1lc3NhZ2VMZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVhZEhlYWRlcihidWY6IEJ5dGVCdWZmZXIpOiBIZWFkZXIgfCBudWxsIHtcbiAgICBpZiAoIXZhbGlkYXRlKGJ1ZikpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aDogYnVmLnJlYWRVaW50MzIoKSxcbiAgICAgIHR5cGU6IGJ1Zi5yZWFkVWludDMyKCkgYXMgRW51bVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBXaXJlTWVzc2FnZVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2VuZ2luZS9jb21wb25lbnQnXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi8uLi9lbmdpbmUvZW50aXR5J1xuaW1wb3J0IHsgQnl0ZUJ1ZmZlciB9IGZyb20gJy4uL0J5dGVCdWZmZXInXG5pbXBvcnQgV2lyZU1lc3NhZ2UgZnJvbSAnLi4vd2lyZU1lc3NhZ2UnXG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29tcG9uZW50T3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBlbnRpdHkgLSBVaW50MzIgbnVtYmVyIG9mIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIGNvbXBvbmVudElkIC0gVWludDMyIG51bWJlciBvZiBpZFxuICAgKiBAcGFyYW0gdGltZXN0YW1wIC0gVWludDY0IExhbXBvcnQgdGltZXN0YW1wXG4gICAqIEBwYXJhbSBkYXRhIC0gVWludDhbXSBkYXRhIG9mIGNvbXBvbmVudFxuICAgKi9cbiAgZXhwb3J0IHR5cGUgSVB1dENvbXBvbmVudCA9IHtcbiAgICBlbnRpdHk6IEVudGl0eVxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgICB0aW1lc3RhbXA6IG51bWJlclxuICAgIGRhdGE6IFVpbnQ4QXJyYXlcbiAgfVxuICBleHBvcnQgdHlwZSBJRGVsZXRlQ29tcG9uZW50ID0ge1xuICAgIGVudGl0eTogRW50aXR5XG4gICAgY29tcG9uZW50SWQ6IG51bWJlclxuICAgIHRpbWVzdGFtcDogbnVtYmVyXG4gICAgZGF0YT86IHVuZGVmaW5lZFxuICB9XG5cbiAgZXhwb3J0IGNvbnN0IE1FU1NBR0VfSEVBREVSX0xFTkdUSCA9IDIwXG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGFuIG9wdGltYWwgd3JpdGluZyBkYXRhIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXJcbiAgICogIGFscmVhZHkgYWxsb2NhdGVkXG4gICAqL1xuICBleHBvcnQgZnVuY3Rpb24gd3JpdGUoXG4gICAgdHlwZTogV2lyZU1lc3NhZ2UuRW51bSxcbiAgICBlbnRpdHk6IEVudGl0eSxcbiAgICB0aW1lc3RhbXA6IG51bWJlcixcbiAgICBjb21wb25lbnREZWZpbml0aW9uOiBDb21wb25lbnREZWZpbml0aW9uLFxuICAgIGJ1ZjogQnl0ZUJ1ZmZlclxuICApIHtcbiAgICAvLyByZXNlcnZlIHRoZSBiZWdpbm5pbmdcbiAgICBjb25zdCBzdGFydE1lc3NhZ2VPZmZzZXQgPSBidWYuaW5jcmVtZW50V3JpdGVPZmZzZXQoXG4gICAgICBXaXJlTWVzc2FnZS5IRUFERVJfTEVOR1RIICsgTUVTU0FHRV9IRUFERVJfTEVOR1RIXG4gICAgKVxuXG4gICAgLy8gd3JpdGUgYm9keVxuICAgIGlmICh0eXBlID09PSBXaXJlTWVzc2FnZS5FbnVtLlBVVF9DT01QT05FTlQpIHtcbiAgICAgIGNvbXBvbmVudERlZmluaXRpb24ud3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5LCBidWYpXG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VMZW5ndGggPSBidWYuc2l6ZSgpIC0gc3RhcnRNZXNzYWdlT2Zmc2V0XG5cbiAgICAvLyBXcml0ZSBXaXJlTWVzc2FnZSBoZWFkZXJcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCwgbWVzc2FnZUxlbmd0aClcbiAgICBidWYuc2V0VWludDMyKHN0YXJ0TWVzc2FnZU9mZnNldCArIDQsIHR5cGUpXG5cbiAgICAvLyBXcml0ZSBDb21wb25lbnRPcGVyYXRpb24gaGVhZGVyXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyA4LCBlbnRpdHkpXG4gICAgYnVmLnNldFVpbnQzMihzdGFydE1lc3NhZ2VPZmZzZXQgKyAxMiwgY29tcG9uZW50RGVmaW5pdGlvbi5faWQpXG4gICAgYnVmLnNldFVpbnQ2NChzdGFydE1lc3NhZ2VPZmZzZXQgKyAxNiwgQmlnSW50KHRpbWVzdGFtcCkpXG4gICAgYnVmLnNldFVpbnQzMihcbiAgICAgIHN0YXJ0TWVzc2FnZU9mZnNldCArIDI0LFxuICAgICAgbWVzc2FnZUxlbmd0aCAtIE1FU1NBR0VfSEVBREVSX0xFTkdUSCAtIFdpcmVNZXNzYWdlLkhFQURFUl9MRU5HVEhcbiAgICApXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gcmVhZChcbiAgICBidWY6IEJ5dGVCdWZmZXJcbiAgKTogKFdpcmVNZXNzYWdlLkhlYWRlciAmIChJUHV0Q29tcG9uZW50IHwgSURlbGV0ZUNvbXBvbmVudCkpIHwgbnVsbCB7XG4gICAgY29uc3QgaGVhZGVyID0gV2lyZU1lc3NhZ2UucmVhZEhlYWRlcihidWYpXG5cbiAgICBpZiAoIWhlYWRlcikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBjb21tb24gPSB7XG4gICAgICAuLi5oZWFkZXIsXG4gICAgICBlbnRpdHk6IGJ1Zi5yZWFkVWludDMyKCkgYXMgRW50aXR5LFxuICAgICAgY29tcG9uZW50SWQ6IGJ1Zi5yZWFkSW50MzIoKSxcbiAgICAgIHRpbWVzdGFtcDogTnVtYmVyKGJ1Zi5yZWFkVWludDY0KCkpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlci50eXBlID09PSBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlQpIHtcbiAgICAgIHJldHVybiBjb21tb25cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29tbW9uLFxuICAgICAgZGF0YTogYnVmLnJlYWRCdWZmZXIoKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgY3JkdFByb3RvY29sLCBNZXNzYWdlIGFzIENyZHRNZXNzYWdlIH0gZnJvbSAnQGRjbC9jcmR0J1xuXG5pbXBvcnQgdHlwZSB7IFByZUVuZ2luZSB9IGZyb20gJy4uLy4uL2VuZ2luZSdcbmltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbnRpdHknXG5pbXBvcnQgeyBjcmVhdGVCeXRlQnVmZmVyIH0gZnJvbSAnLi4vLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgQ29tcG9uZW50T3BlcmF0aW9uIGFzIE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9zZXJpYWxpemF0aW9uL2NyZHQvY29tcG9uZW50T3BlcmF0aW9uJ1xuaW1wb3J0IFdpcmVNZXNzYWdlIGZyb20gJy4uLy4uL3NlcmlhbGl6YXRpb24vd2lyZU1lc3NhZ2UnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvdHlwZXMnXG5pbXBvcnQgeyBSZWNlaXZlTWVzc2FnZSwgVHJhbnNwb3J0TWVzc2FnZSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmR0U2NlbmVTeXN0ZW0oe1xuICBlbmdpbmUsXG4gIHRyYW5zcG9ydHNcbn06IHtcbiAgZW5naW5lOiBQcmVFbmdpbmVcbiAgdHJhbnNwb3J0czogVHJhbnNwb3J0W11cbn0pIHtcbiAgLy8gQ1JEVCBDbGllbnRcbiAgY29uc3QgY3JkdENsaWVudCA9IGNyZHRQcm90b2NvbDxVaW50OEFycmF5PigpXG4gIC8vIE1lc3NhZ2VzIHRoYXQgd2UgcmVjZWl2ZWQgYXQgdHJhbnNwb3J0Lm9uTWVzc2FnZSB3YWl0aW5nIHRvIGJlIHByb2Nlc3NlZFxuICBjb25zdCByZWNlaXZlZE1lc3NhZ2VzOiBSZWNlaXZlTWVzc2FnZVtdID0gW11cbiAgLy8gTWVzc2FnZXMgYWxyZWFkeSBwcm9jZXNzZWQgYnkgdGhlIGVuZ2luZSBidXQgdGhhdCB3ZSBuZWVkIHRvIGJyb2FkY2FzdCB0byBvdGhlciB0cmFuc3BvcnRzLlxuICBjb25zdCB0cmFuc3BvcnRNZXNzYWdlczogVHJhbnNwb3J0TWVzc2FnZVtdID0gW11cbiAgLy8gTWFwIG9mIGVudGl0aWVzIGFscmVhZHkgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uY2VcblxuICB0cmFuc3BvcnRzLmZvckVhY2goXG4gICAgKHRyYW5zcG9ydCkgPT4gKHRyYW5zcG9ydC5vbm1lc3NhZ2UgPSBwYXJzZUNodW5rTWVzc2FnZSh0cmFuc3BvcnQudHlwZSkpXG4gIClcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHRyYW5zcG9ydFR5cGUgdHJhbnBvcnQgaWQgdG8gaWRlbnRpeSBtZXNzYWdlc1xuICAgKiBAcmV0dXJucyBhIGZ1bmN0aW9uIHRvIHByb2Nlc3MgcmVjZWl2ZWQgbWVzc2FnZXNcbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlQ2h1bmtNZXNzYWdlKHRyYW5zcG9ydFR5cGU6IHN0cmluZykge1xuICAgIC8qKlxuICAgICAqIFJlY2VpdmVzIGEgY2h1bmsgb2YgYmluYXJ5IG1lc3NhZ2VzIGFuZCBzdG9yZXMgYWxsIHRoZSB2YWxpZFxuICAgICAqIENvbXBvbmVudCBPcGVyYXRpb24gTWVzc2FnZXMgYXQgbWVzc2FnZXMgcXVldWVcbiAgICAgKiBAcGFyYW0gY2h1bmtNZXNzYWdlIEEgY2h1bmsgb2YgYmluYXJ5IG1lc3NhZ2VzXG4gICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhcnNlQ2h1bmtNZXNzYWdlKGNodW5rTWVzc2FnZTogVWludDhBcnJheSkge1xuICAgICAgY29uc3QgYnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcih7XG4gICAgICAgIHJlYWRpbmc6IHsgYnVmZmVyOiBjaHVua01lc3NhZ2UsIGN1cnJlbnRPZmZzZXQ6IDAgfVxuICAgICAgfSlcblxuICAgICAgd2hpbGUgKFdpcmVNZXNzYWdlLnZhbGlkYXRlKGJ1ZmZlcikpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYnVmZmVyLmN1cnJlbnRSZWFkT2Zmc2V0KClcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UucmVhZChidWZmZXIpIVxuXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZW50aXR5LCBjb21wb25lbnRJZCwgZGF0YSwgdGltZXN0YW1wIH0gPSBtZXNzYWdlXG4gICAgICAgIHJlY2VpdmVkTWVzc2FnZXMucHVzaCh7XG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICB0aW1lc3RhbXAsXG4gICAgICAgICAgdHJhbnNwb3J0VHlwZSxcbiAgICAgICAgICBtZXNzYWdlQnVmZmVyOiBidWZmZXJcbiAgICAgICAgICAgIC5idWZmZXIoKVxuICAgICAgICAgICAgLnN1YmFycmF5KG9mZnNldCwgYnVmZmVyLmN1cnJlbnRSZWFkT2Zmc2V0KCkpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbmQgY2xlYXIgdGhlIG1lc3NhZXMgcXVldWVcbiAgICogQHJldHVybnMgbWVzc2FnZXMgcmVjaWV2ZWQgYnkgdGhlIHRyYW5zcG9ydCB0byBwcm9jZXNzIG9uIHRoZSBuZXh0IHRpY2tcbiAgICovXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2VzPFQgPSB1bmtub3duPih2YWx1ZTogVFtdKSB7XG4gICAgY29uc3QgbWVzc2FnZXNUb1Byb2Nlc3MgPSBBcnJheS5mcm9tKHZhbHVlKVxuICAgIHZhbHVlLmxlbmd0aCA9IDBcbiAgICByZXR1cm4gbWVzc2FnZXNUb1Byb2Nlc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZuIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZXJ5IHRpY2suXG4gICAqIFByb2Nlc3MgYWxsIHRoZSBtZXNzYWdlcyBxdWV1ZSByZWNlaXZlZCBieSB0aGUgdHJhbnNwb3J0XG4gICAqL1xuICBmdW5jdGlvbiByZWNlaXZlTWVzc2FnZXMoKSB7XG4gICAgY29uc3QgbWVzc2FnZXNUb1Byb2Nlc3MgPSBnZXRNZXNzYWdlcyhyZWNlaXZlZE1lc3NhZ2VzKVxuICAgIGZvciAoY29uc3QgdHJhbnNwb3J0IG9mIHRyYW5zcG9ydHMpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzVG9Qcm9jZXNzKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgdGltZXN0YW1wLCBjb21wb25lbnRJZCwgZW50aXR5LCB0eXBlIH0gPSBtZXNzYWdlXG4gICAgICAgIGNvbnN0IGNyZHRNZXNzYWdlOiBDcmR0TWVzc2FnZTxVaW50OEFycmF5PiA9IHtcbiAgICAgICAgICBrZXkxOiBlbnRpdHksXG4gICAgICAgICAga2V5MjogY29tcG9uZW50SWQsXG4gICAgICAgICAgZGF0YTogZGF0YSB8fCBudWxsLFxuICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZW5naW5lLmdldENvbXBvbmVudChjb21wb25lbnRJZClcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGNyZHRDbGllbnQucHJvY2Vzc01lc3NhZ2UoY3JkdE1lc3NhZ2UpXG5cbiAgICAgICAgLy8gQ1JEVCBvdXRkYXRlZCBtZXNzYWdlLiBSZXNlbmQgdGhpcyBtZXNzYWdlIHRocm91Z2ggdGhlIHdpcmVcbiAgICAgICAgaWYgKGNyZHRNZXNzYWdlICE9PSBjdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgdHlwZSA9IGNvbXBvbmVudC5oYXMoZW50aXR5KVxuICAgICAgICAgICAgPyBXaXJlTWVzc2FnZS5FbnVtLlBVVF9DT01QT05FTlRcbiAgICAgICAgICAgIDogV2lyZU1lc3NhZ2UuRW51bS5ERUxFVEVfQ09NUE9ORU5UXG4gICAgICAgICAgTWVzc2FnZS53cml0ZSh0eXBlLCBlbnRpdHksIGN1cnJlbnQudGltZXN0YW1wLCBjb21wb25lbnQsIGJ1ZmZlcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQcm9jZXNzIENSRFQgTWVzc2FnZVxuICAgICAgICAgIGlmICh0eXBlID09PSBXaXJlTWVzc2FnZS5FbnVtLkRFTEVURV9DT01QT05FTlQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5kZWxldGVGcm9tKGVudGl0eSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgICAgcmVhZGluZzogeyBidWZmZXI6IG1lc3NhZ2UuZGF0YSEsIGN1cnJlbnRPZmZzZXQ6IDAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmIgPSBjcmVhdGVCeXRlQnVmZmVyKG9wdHMpXG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBlbmdpbmUgY29tcG9uZW50XG4gICAgICAgICAgICBjb21wb25lbnQudXBzZXJ0RnJvbUJpbmFyeShtZXNzYWdlLmVudGl0eSwgYmIpXG4gICAgICAgICAgICBjb21wb25lbnQuY2xlYXJEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFkZCBtZXNzYWdlIHRvIHRyYW5zcG9ydCBxdWV1ZSB0byBiZSBwcm9jZXNzZWQgYnkgb3RoZXJzIHRyYW5zcG9ydHNcbiAgICAgICAgICB0cmFuc3BvcnRNZXNzYWdlcy5wdXNoKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJ1ZmZlci5zaXplKCkpIHtcbiAgICAgICAgdHJhbnNwb3J0LnNlbmQoYnVmZmVyLnRvQmluYXJ5KCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIHRoZSBkaXJ0eSBtYXAgYW5kIGdlbmVyYXRlcyBjcmR0IG1lc3NhZ2VzIHRvIGJlIHNlbmRcbiAgICogQHBhcmFtIGRpcnR5TWFwIGEgbWFwIG9mIHsgZW50aXRpZXM6IFtjb21wb25lbnRJZF0gfVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlTWVzc2FnZXMoZGlydHlNYXA6IE1hcDxFbnRpdHksIFNldDxudW1iZXI+Pikge1xuICAgIC8vIENSRFQgTWVzc2FnZXMgd2lsbCBiZSB0aGUgbWVyZ2UgYmV0d2VlbiB0aGUgcmVjaWV2ZWQgdHJhbnNwb3J0IG1lc3NhZ2VzIGFuZCB0aGUgbmV3IGNyZHQgbWVzc2FnZXNcbiAgICBjb25zdCBjcmR0TWVzc2FnZXMgPSBnZXRNZXNzYWdlcyh0cmFuc3BvcnRNZXNzYWdlcylcbiAgICBjb25zdCBidWZmZXIgPSBjcmVhdGVCeXRlQnVmZmVyKClcblxuICAgIGZvciAoY29uc3QgW2VudGl0eSwgY29tcG9uZW50c0lkXSBvZiBkaXJ0eU1hcCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnRJZCBvZiBjb21wb25lbnRzSWQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZW5naW5lLmdldENvbXBvbmVudChjb21wb25lbnRJZClcbiAgICAgICAgY29uc3QgZW50aXR5Q29tcG9uZW50ID0gY29tcG9uZW50LmhhcyhlbnRpdHkpXG4gICAgICAgICAgPyBjb21wb25lbnQudG9CaW5hcnkoZW50aXR5KS50b0JpbmFyeSgpXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gY3JkdENsaWVudC5jcmVhdGVFdmVudChcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgY29tcG9uZW50SWQsXG4gICAgICAgICAgZW50aXR5Q29tcG9uZW50XG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb21wb25lbnQuaGFzKGVudGl0eSlcbiAgICAgICAgICA/IFdpcmVNZXNzYWdlLkVudW0uUFVUX0NPTVBPTkVOVFxuICAgICAgICAgIDogV2lyZU1lc3NhZ2UuRW51bS5ERUxFVEVfQ09NUE9ORU5UXG4gICAgICAgIGNvbnN0IHRyYW5zcG9ydE1lc3NhZ2U6IE9taXQ8VHJhbnNwb3J0TWVzc2FnZSwgJ21lc3NhZ2VCdWZmZXInPiA9IHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIGNvbXBvbmVudElkLFxuICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICB0aW1lc3RhbXA6IGV2ZW50LnRpbWVzdGFtcFxuICAgICAgICB9XG4gICAgICAgIGlmICh0cmFuc3BvcnRzLnNvbWUoKHQpID0+IHQuZmlsdGVyKHRyYW5zcG9ydE1lc3NhZ2UpKSkge1xuICAgICAgICAgIE1lc3NhZ2Uud3JpdGUodHlwZSwgZW50aXR5LCBldmVudC50aW1lc3RhbXAsIGNvbXBvbmVudCwgYnVmZmVyKVxuICAgICAgICAgIGNyZHRNZXNzYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLnRyYW5zcG9ydE1lc3NhZ2UsXG4gICAgICAgICAgICBtZXNzYWdlQnVmZmVyOiBidWZmZXJcbiAgICAgICAgICAgICAgLmJ1ZmZlcigpXG4gICAgICAgICAgICAgIC5zdWJhcnJheShvZmZzZXQsIGJ1ZmZlci5jdXJyZW50V3JpdGVPZmZzZXQoKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VuZCBtZXNzYWdlcyB0byB0cmFuc3BvcnRzXG4gICAgY29uc3QgdHJhbnNwb3J0QnVmZmVyID0gY3JlYXRlQnl0ZUJ1ZmZlcigpXG4gICAgZm9yIChjb25zdCB0cmFuc3BvcnQgb2YgdHJhbnNwb3J0cykge1xuICAgICAgdHJhbnNwb3J0QnVmZmVyLnJlc2V0QnVmZmVyKClcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiBjcmR0TWVzc2FnZXMpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydC5maWx0ZXIobWVzc2FnZSkpIHtcbiAgICAgICAgICB0cmFuc3BvcnRCdWZmZXIud3JpdGVCdWZmZXIobWVzc2FnZS5tZXNzYWdlQnVmZmVyLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydEJ1ZmZlci5zaXplKCkpIHtcbiAgICAgICAgdHJhbnNwb3J0LnNlbmQodHJhbnNwb3J0QnVmZmVyLnRvQmluYXJ5KCkpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNZXNzYWdlcyxcbiAgICByZWNlaXZlTWVzc2FnZXNcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4vY29tcG9uZW50J1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5TWFwPEssIFY+ID0gUmVhZG9ubHlNYXA8XG4gIERlZXBSZWFkb25seTxLPixcbiAgRGVlcFJlYWRvbmx5PFY+XG4+XG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGVlcFJlYWRvbmx5U2V0PFQ+ID0gUmVhZG9ubHlTZXQ8RGVlcFJlYWRvbmx5PFQ+PlxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seU9iamVjdDxUPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4ga2V5b2YgVF06IERlZXBSZWFkb25seTxUW0tdPlxufVxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRvbmx5UHJpbWl0aXZlID1cbiAgfCBudW1iZXJcbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJbXVxuICB8IHN0cmluZ1tdXG4gIHwgYm9vbGVhblxuICB8IGJvb2xlYW5bXVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgUmVhZG9ubHlDb21wb25lbnRTY2hlbWE8XG4gIFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXVxuPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBDb21wb25lbnREZWZpbml0aW9uXG4gICAgPyBSZXR1cm5UeXBlPFRbS11bJ2dldCddPlxuICAgIDogbmV2ZXJcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seTxUPiA9IFQgZXh0ZW5kcyBSZWFkb25seVByaW1pdGl2ZVxuICA/IFRcbiAgOiBUIGV4dGVuZHMgTWFwPGluZmVyIEssIGluZmVyIFY+XG4gID8gRGVlcFJlYWRvbmx5TWFwPEssIFY+XG4gIDogVCBleHRlbmRzIFNldDxpbmZlciBNPlxuICA/IERlZXBSZWFkb25seVNldDxNPlxuICA6IERlZXBSZWFkb25seU9iamVjdDxUPlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcFJlYWRvbmx5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHZhbDogVFxuKTogRGVlcFJlYWRvbmx5PFQ+IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi52YWwgfSkgYXMgRGVlcFJlYWRvbmx5PFQ+XG59XG4iLCJpbXBvcnQgdHlwZSB7IElTY2hlbWEgfSBmcm9tICcuLi9zY2hlbWFzL0lTY2hlbWEnXG5pbXBvcnQgeyBCeXRlQnVmZmVyLCBjcmVhdGVCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSAnLi9lbnRpdHknXG5pbXBvcnQgeyBkZWVwUmVhZG9ubHksIERlZXBSZWFkb25seSB9IGZyb20gJy4vcmVhZG9ubHknXG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFY3NSZXN1bHQ8VCBleHRlbmRzIElTY2hlbWE+ID0gVCBleHRlbmRzIElTY2hlbWFcbiAgPyBSZXR1cm5UeXBlPFRbJ2Rlc2VyaWFsaXplJ10+XG4gIDogbmV2ZXJcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbXBvbmVudFR5cGU8VCBleHRlbmRzIElTY2hlbWE+ID0gRWNzUmVzdWx0PFQ+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBDb21wb25lbnREZWZpbml0aW9uPFxuICBUIGV4dGVuZHMgSVNjaGVtYSA9IElTY2hlbWE8YW55PixcbiAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuPiA9IHtcbiAgX2lkOiBudW1iZXJcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudFxuICAgKi9cbiAgZGVmYXVsdCgpOiBEZWVwUmVhZG9ubHk8Q29tcG9uZW50VHlwZTxUPj5cblxuICAvKipcbiAgICogR2V0IGlmIHRoZSBlbnRpdHkgaGFzIHRoaXMgY29tcG9uZW50XG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmhhcyhteUVudGl0eSkgLy8gcmV0dXJuIGZhbHNlXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpXG4gICAqIFRyYW5zZm9ybS5oYXMobXlFbnRpdHkpIC8vIHJldHVybiB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzKGVudGl0eTogRW50aXR5KTogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlYWRvbmx5IGNvbXBvbmVudCBvZiB0aGUgZW50aXR5ICh0byBtdXRhdGUgaXQsIHVzZSBnZXRNdXRhYmxlIGluc3RlYWQpLCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEByZXR1cm5cbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSlcbiAgICogY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldChteUVudGl0eSkgLy8gcmV0dXJuIHRydWVcbiAgICogbG9nKHRyYW5zZm9ybS5wb3NpdGlvbi54ID09PSAwKSAvLyBsb2cgJ3RydWUnXG4gICAqXG4gICAqIHRyYW5zZm9ybS5wb3NpdGlvbi55ID0gMTAgLy8gaWxsZWdhbCBzdGF0ZW1lbnQsIHRvIG11dGF0ZSB0aGUgY29tcG9uZW50IHVzZSBnZXRNdXRhYmxlXG4gICAqIGBgYFxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBvdGhlckVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uZ2V0KG90aGVyRW50aXR5KSAvLyB0aHJvdyBhbiBlcnJvciEhXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0KGVudGl0eTogRW50aXR5KTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhZG9ubHkgY29tcG9uZW50IG9mIHRoZSBlbnRpdHkgKHRvIG11dGF0ZSBpdCwgdXNlIGdldE11dGFibGUgaW5zdGVhZCksIG9yIG51bGwgaWYgdGhlIGVudGl0eSBkb2Vzbid0IGhhdmUgdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIGVudGl0eVxuICAgKiBAcmV0dXJuXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG90aGVyRW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIGxvZyhUcmFuc2Zvcm0uZ2V0KG90aGVyRW50aXR5KSA9PT0gbnVsbCkgLy8gbG9nICd0cnVlJ1xuICAgKiBgYGBcbiAgICovXG4gIGdldE9yTnVsbChlbnRpdHk6IEVudGl0eSk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB8IG51bGxcblxuICAvKipcbiAgICogQWRkIHRoZSBjdXJyZW50IGNvbXBvbmVudCB0byBhbiBlbnRpdHksIHRocm93IGFuIGVycm9yIGlmIHRoZSBjb21wb25lbnQgYWxyZWFkeSBleGlzdHMgKHVzZSBgY3JlYXRlT3JSZXBsYWNlYCBpbnN0ZWFkKS5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSB2YWwgVGhlIGluaXRpYWwgdmFsdWVcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgbXlFbnRpdHkgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICogVHJhbnNmb3JtLmNyZWF0ZShteUVudGl0eSwgeyAuLi5UcmFuc2Zvcm0uZGVmYXVsdCgpLCBwb3NpdGlvbjoge3g6IDQsIHk6IDAsIHo6IDR9IH0pIC8vIG9rIVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KSAvLyB0aHJvdyBhbiBlcnJvciwgdGhlIGBUcmFuc2Zvcm1gIGNvbXBvbmVudCBhbHJlYWR5IGV4aXN0cyBpbiBgbXlFbnRpdHlgXG4gICAqIGBgYGBcbiAgICovXG4gIGNyZWF0ZShlbnRpdHk6IEVudGl0eSwgdmFsPzogQ29uc3RydWN0b3JUeXBlKTogQ29tcG9uZW50VHlwZTxUPlxuICAvKipcbiAgICogQWRkIHRoZSBjdXJyZW50IGNvbXBvbmVudCB0byBhbiBlbnRpdHkgb3IgcmVwbGFjZSB0aGUgY29udGVudCBpZiB0aGUgZW50aXR5IGFscmVhZHkgaGFzIHRoZSBjb21wb25lbnRcbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqIEBwYXJhbSB2YWwgVGhlIGluaXRpYWwgb3IgbmV3IHZhbHVlXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIG9rIVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlT3JSZXBsYWNlKG15RW50aXR5LCB7IC4uLlRyYW5zZm9ybS5kZWZhdWx0KCksIHBvc2l0aW9uOiB7eDogNCwgeTogMCwgejogNH0gfSkgLy8gb2shXG4gICAqIGBgYGBcbiAgICovXG4gIGNyZWF0ZU9yUmVwbGFjZShlbnRpdHk6IEVudGl0eSwgdmFsPzogQ29tcG9uZW50VHlwZTxUPik6IENvbXBvbmVudFR5cGU8VD5cblxuICAvKipcbiAgICogRGVsZXRlIHRoZSBjdXJyZW50IGNvbXBvbmVudCB0byBhbiBlbnRpdHksIHJldHVybiBudWxsIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjdXJyZW50IGNvbXBvbmVudC5cbiAgICogLSBJbnRlcm5hbCBjb21tZW50OiBUaGlzIG1ldGhvZCBhZGRzIHRoZSA8ZW50aXR5LGNvbXBvbmVudD4gdG8gdGhlIGxpc3QgdG8gYmUgcmV2aWV3ZWQgbmV4dCBmcmFtZVxuICAgKiBAcGFyYW0gZW50aXR5XG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IG15RW50aXR5ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAqIFRyYW5zZm9ybS5jcmVhdGUobXlFbnRpdHkpIC8vIG9rIVxuICAgKiBUcmFuc2Zvcm0uZGVsZXRlRnJvbShteUVudGl0eSkgLy8gcmV0dXJuIHRoZSBjb21wb25lbnRcbiAgICogVHJhbnNmb3JtLmRlbGV0ZUZyb20obXlFbnRpdHkpIC8vIHJldHVybiBudWxsXG4gICAqIGBgYGBcbiAgICovXG4gIGRlbGV0ZUZyb20oZW50aXR5OiBFbnRpdHkpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG11dGFibGUgY29tcG9uZW50IG9mIHRoZSBlbnRpdHksIHRocm93IGFuIGVycm9yIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBoYXZlIHRoZSBjb21wb25lbnQuXG4gICAqIC0gSW50ZXJuYWwgY29tbWVudDogVGhpcyBtZXRob2QgYWRkcyB0aGUgPGVudGl0eSxjb21wb25lbnQ+IHRvIHRoZSBsaXN0IHRvIGJlIHJldmlld2VkIG5leHQgZnJhbWVcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBteUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuICAgKiBUcmFuc2Zvcm0uY3JlYXRlKG15RW50aXR5KVxuICAgKiBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShteUVudGl0eSkucG9zaXRpb24gPSB7eDogNCwgeTogMCwgejogNH1cbiAgICogYGBgYFxuICAgKi9cbiAgZ2V0TXV0YWJsZShlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD5cblxuICAvKipcbiAgICogR2V0IHRoZSBtdXRhYmxlIGNvbXBvbmVudCBvZiB0aGUgZW50aXR5LCByZXR1cm4gbnVsbCBpZiB0aGUgZW50aXR5IGRvZXNuJ3QgaGF2ZSB0aGUgY29tcG9uZW50LlxuICAgKiAtIEludGVybmFsIGNvbW1lbnQ6IFRoaXMgbWV0aG9kIGFkZHMgdGhlIDxlbnRpdHksY29tcG9uZW50PiB0byB0aGUgbGlzdCB0byBiZSByZXZpZXdlZCBuZXh0IGZyYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogY29uc3QgdHJhbnNmb3JtID0gVHJhbnNmb3JtLmdldE11dGFibGVPck51bGwobXlFbnRpdHkpXG4gICAqIGlmICh0cmFuc2Zvcm0pIHtcbiAgICogICB0cmFuc2Zvcm0ucG9zaXRpb24gPSB7eDogNCwgeTogMCwgejogNH1cbiAgICogfVxuICAgKiBgYGBgXG4gICAqL1xuICBnZXRNdXRhYmxlT3JOdWxsKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGxcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHVwc2VydEZyb21CaW5hcnkoZW50aXR5OiBFbnRpdHksIGRhdGE6IEJ5dGVCdWZmZXIpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEBwYXJhbSBlbnRpdHlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHVwZGF0ZUZyb21CaW5hcnkoZW50aXR5OiBFbnRpdHksIGRhdGE6IEJ5dGVCdWZmZXIpOiBDb21wb25lbnRUeXBlPFQ+IHwgbnVsbFxuXG4gIC8vIGFsbG9jYXRlcyBhIGJ1ZmZlciBhbmQgcmV0dXJucyBuZXcgYnVmZmVyXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGVudGl0eVxuICAgKi9cbiAgdG9CaW5hcnkoZW50aXR5OiBFbnRpdHkpOiBCeXRlQnVmZmVyXG5cbiAgLy8gd3JpdGVzIHRvIGEgcHJlLWFsbG9jYXRlZCBidWZmZXJcbiAgd3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5OiBFbnRpdHksIGJ1ZmZlcjogQnl0ZUJ1ZmZlcik6IHZvaWRcblxuICAvKipcbiAgICogQGludGVybmFsIFVzZSBlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKENvbXBvbmVudCkgaW5zdGVhZC5cbiAgICogR2V0IHRoZSBpdGVyYXRvciB0byBldmVyeSBlbnRpdHkgaGFzIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGl0ZXJhdG9yKCk6IEl0ZXJhYmxlPFtFbnRpdHksIENvbXBvbmVudFR5cGU8VD5dPlxuXG4gIC8vIERpcnR5XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRpcnR5SXRlcmF0b3IoKTogSXRlcmFibGU8RW50aXR5PlxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjbGVhckRpcnR5KCk6IHZvaWRcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaXNEaXJ0eShlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudDxcbiAgVCBleHRlbmRzIElTY2hlbWEsXG4gIENvbnN0cnVjdG9yVHlwZSA9IENvbXBvbmVudFR5cGU8VD5cbj4oXG4gIGNvbXBvbmVudElkOiBudW1iZXIsXG4gIHNwZWM6IFQsXG4gIGNvbnN0cnVjdG9yRGVmYXVsdD86IENvbnN0cnVjdG9yVHlwZVxuICAvLyBtZXRhOiB7IHN5bmNGbGFncyB9XG4pOiBDb21wb25lbnREZWZpbml0aW9uPFQsIENvbnN0cnVjdG9yVHlwZT4ge1xuICBjb25zdCBkYXRhID0gbmV3IE1hcDxFbnRpdHksIENvbXBvbmVudFR5cGU8VD4+KClcbiAgY29uc3QgZGlydHlJdGVyYXRvciA9IG5ldyBTZXQ8RW50aXR5PigpXG5cbiAgY29uc3QgZGVmYXVsdEJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICBpZiAoY29uc3RydWN0b3JEZWZhdWx0KSB7XG4gICAgc3BlYy5zZXJpYWxpemUoY29uc3RydWN0b3JEZWZhdWx0LCBkZWZhdWx0QnVmZmVyKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmIChjb25zdHJ1Y3RvckRlZmF1bHQpIHtcbiAgICAgIHJldHVybiBzcGVjLmRlc2VyaWFsaXplKFxuICAgICAgICBjcmVhdGVCeXRlQnVmZmVyKHtcbiAgICAgICAgICB3cml0aW5nOiB7XG4gICAgICAgICAgICBidWZmZXI6IGRlZmF1bHRCdWZmZXIuYnVmZmVyKCksXG4gICAgICAgICAgICBjdXJyZW50T2Zmc2V0OiBkZWZhdWx0QnVmZmVyLmN1cnJlbnRXcml0ZU9mZnNldCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3BlYy5jcmVhdGUoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWZpbGxWYWx1ZSh2YWx1ZTogQ29uc3RydWN0b3JUeXBlKSB7XG4gICAgcmV0dXJuIHsgLi4uZ2V0RGVmYXVsdFZhbHVlKCksIC4uLnZhbHVlIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgX2lkOiBjb21wb25lbnRJZCxcbiAgICBkZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKClcbiAgICB9LFxuICAgIGlzRGlydHk6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGRpcnR5SXRlcmF0b3IuaGFzKGVudGl0eSlcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gZGF0YS5oYXMoZW50aXR5KVxuICAgIH0sXG4gICAgZGVsZXRlRnJvbTogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgZGF0YS5kZWxldGUoZW50aXR5KVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIGNvbXBvbmVudCB8fCBudWxsXG4gICAgfSxcbiAgICBnZXRPck51bGw6IGZ1bmN0aW9uIChcbiAgICAgIGVudGl0eTogRW50aXR5XG4gICAgKTogRGVlcFJlYWRvbmx5PENvbXBvbmVudFR5cGU8VD4+IHwgbnVsbCB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICByZXR1cm4gY29tcG9uZW50ID8gZGVlcFJlYWRvbmx5KGNvbXBvbmVudCkgOiBudWxsXG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IERlZXBSZWFkb25seTxDb21wb25lbnRUeXBlPFQ+PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtnZXRGcm9tXSBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gZm9yICR7ZW50aXR5fSBub3QgZm91bmRgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWVwUmVhZG9ubHkoY29tcG9uZW50KVxuICAgIH0sXG4gICAgY3JlYXRlOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIHZhbHVlPzogQ29uc3RydWN0b3JUeXBlXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBkYXRhLmdldChlbnRpdHkpXG4gICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW2NyZWF0ZV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gYWxyZWFkeSBleGlzdHNgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZWRWYWx1ZSA9XG4gICAgICAgIHZhbHVlID09PSB1bmRlZmluZWQgPyBnZXREZWZhdWx0VmFsdWUoKSA6IHByZWZpbGxWYWx1ZSh2YWx1ZSlcbiAgICAgIGRhdGEuc2V0KGVudGl0eSwgdXNlZFZhbHVlKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIHVzZWRWYWx1ZVxuICAgIH0sXG4gICAgY3JlYXRlT3JSZXBsYWNlOiBmdW5jdGlvbiAoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIHZhbHVlPzogQ29uc3RydWN0b3JUeXBlXG4gICAgKTogQ29tcG9uZW50VHlwZTxUPiB7XG4gICAgICBjb25zdCB1c2VkVmFsdWUgPVxuICAgICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gZ2V0RGVmYXVsdFZhbHVlKCkgOiBwcmVmaWxsVmFsdWUodmFsdWUpXG4gICAgICBkYXRhLnNldChlbnRpdHksIHVzZWRWYWx1ZSEpXG4gICAgICBkaXJ0eUl0ZXJhdG9yLmFkZChlbnRpdHkpXG4gICAgICByZXR1cm4gdXNlZFZhbHVlIVxuICAgIH0sXG4gICAgZ2V0TXV0YWJsZU9yTnVsbDogZnVuY3Rpb24gKGVudGl0eTogRW50aXR5KTogQ29tcG9uZW50VHlwZTxUPiB8IG51bGwge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIGRpcnR5SXRlcmF0b3IuYWRkKGVudGl0eSlcbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICB9LFxuICAgIGdldE11dGFibGU6IGZ1bmN0aW9uIChlbnRpdHk6IEVudGl0eSk6IENvbXBvbmVudFR5cGU8VD4ge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRNdXRhYmxlT3JOdWxsKGVudGl0eSlcbiAgICAgIGlmIChjb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbbXV0YWJsZV0gQ29tcG9uZW50ICR7Y29tcG9uZW50SWR9IGZvciAke2VudGl0eX0gbm90IGZvdW5kYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgfSxcbiAgICBpdGVyYXRvcjogZnVuY3Rpb24qICgpOiBJdGVyYWJsZTxbRW50aXR5LCBDb21wb25lbnRUeXBlPFQ+XT4ge1xuICAgICAgZm9yIChjb25zdCBbZW50aXR5LCBjb21wb25lbnRdIG9mIGRhdGEpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgY29tcG9uZW50XVxuICAgICAgfVxuICAgIH0sXG4gICAgZGlydHlJdGVyYXRvcjogZnVuY3Rpb24qICgpOiBJdGVyYWJsZTxFbnRpdHk+IHtcbiAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGRpcnR5SXRlcmF0b3IpIHtcbiAgICAgICAgeWllbGQgZW50aXR5XG4gICAgICB9XG4gICAgfSxcbiAgICB0b0JpbmFyeShlbnRpdHk6IEVudGl0eSk6IEJ5dGVCdWZmZXIge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbdG9CaW5hcnldIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3cml0ZUJ1ZmZlciA9IGNyZWF0ZUJ5dGVCdWZmZXIoKVxuICAgICAgc3BlYy5zZXJpYWxpemUoY29tcG9uZW50LCB3cml0ZUJ1ZmZlcilcbiAgICAgIHJldHVybiB3cml0ZUJ1ZmZlclxuICAgIH0sXG4gICAgd3JpdGVUb0J5dGVCdWZmZXIoZW50aXR5OiBFbnRpdHksIGJ1ZmZlcjogQnl0ZUJ1ZmZlcik6IHZvaWQge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gZGF0YS5nZXQoZW50aXR5KVxuICAgICAgaWYgKCFjb21wb25lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBbd3JpdGVUb0J5dGVCdWZmZXJdIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBzcGVjLnNlcmlhbGl6ZShjb21wb25lbnQsIGJ1ZmZlcilcbiAgICB9LFxuICAgIHVwZGF0ZUZyb21CaW5hcnkoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGJ1ZmZlcjogQnl0ZUJ1ZmZlclxuICAgICk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGRhdGEuZ2V0KGVudGl0eSlcbiAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgW3VwZGF0ZUZyb21CaW5hcnldIENvbXBvbmVudCAke2NvbXBvbmVudElkfSBmb3IgJHtlbnRpdHl9IG5vdCBmb3VuZGBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudXBzZXJ0RnJvbUJpbmFyeShlbnRpdHksIGJ1ZmZlcilcbiAgICB9LFxuICAgIHVwc2VydEZyb21CaW5hcnkoXG4gICAgICBlbnRpdHk6IEVudGl0eSxcbiAgICAgIGJ1ZmZlcjogQnl0ZUJ1ZmZlclxuICAgICk6IENvbXBvbmVudFR5cGU8VD4gfCBudWxsIHtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gc3BlYy5kZXNlcmlhbGl6ZShidWZmZXIpXG4gICAgICBkYXRhLnNldChlbnRpdHksIG5ld1ZhbHVlKVxuICAgICAgZGlydHlJdGVyYXRvci5hZGQoZW50aXR5KVxuICAgICAgcmV0dXJuIG5ld1ZhbHVlXG4gICAgfSxcbiAgICBjbGVhckRpcnR5OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkaXJ0eUl0ZXJhdG9yLmNsZWFyKClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IEVudGl0eSB9IGZyb20gJy4vZW50aXR5J1xuXG5leHBvcnQgbmFtZXNwYWNlIEVudGl0eVV0aWxzIHtcbiAgLyoqXG4gICAqIFJhbmdlIGlzIHRoZSBmaXJzdCBlbGVtZW50IGFuZCB0aGUgbGFzdCBwb3NzaWJsZSBlbGVtZW50LCB0aGV5IGJvdGggYXJlIGluY2x1ZGVkIGluIHRoZSBpbnRlcnZhbC5cbiAgICogW3N0YXJ0LCBlbmRdXG4gICAqL1xuICBleHBvcnQgdHlwZSBFbnRpdHlSYW5nZSA9IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl1cblxuICBleHBvcnQgY29uc3QgTUFYX0VOVElUSUVTID0gMHhmZmZmZmZmZlxuICBleHBvcnQgY29uc3QgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCA9IDEwMGUzXG4gIGV4cG9ydCBjb25zdCBSRVNFUlZFRF9TVEFUSUNfRU5USVRJRVMgPSA1MTJcblxuICBleHBvcnQgY29uc3QgUkVTRVJWRURfRU5USVRJRVNfUkFOR0U6IEVudGl0eVJhbmdlID0gW1xuICAgIDAsXG4gICAgUkVTRVJWRURfU1RBVElDX0VOVElUSUVTIC0gMVxuICBdXG5cbiAgZXhwb3J0IGNvbnN0IFNUQVRJQ19FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgUkVTRVJWRURfU1RBVElDX0VOVElUSUVTLFxuICAgIERZTkFNSUNfRU5USVRJRVNfU1RBUlRfQVQgLSAxXG4gIF1cblxuICBleHBvcnQgY29uc3QgRFlOQU1JQ19FTlRJVElFU19SQU5HRTogRW50aXR5UmFuZ2UgPSBbXG4gICAgRFlOQU1JQ19FTlRJVElFU19TVEFSVF9BVCxcbiAgICBNQVhfRU5USVRJRVNcbiAgXVxuXG4gIGZ1bmN0aW9uIGlzSW5SYW5nZShlbnRpdHk6IEVudGl0eSwgcmFuZ2U6IEVudGl0eVJhbmdlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudGl0eSA+PSByYW5nZVswXSAmJiBlbnRpdHkgPD0gcmFuZ2VbMV1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICByZXR1cm4gaXNJblJhbmdlKGVudGl0eSwgRFlOQU1JQ19FTlRJVElFU19SQU5HRSlcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1N0YXRpY0VudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBTVEFUSUNfRU5USVRJRVNfUkFOR0UpXG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNSZXNlcnZlZEVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiBpc0luUmFuZ2UoZW50aXR5LCBSRVNFUlZFRF9FTlRJVElFU19SQU5HRSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFbnRpdHlVdGlsc1xuIiwiaW1wb3J0IHsgRW50aXR5VXRpbHMgfSBmcm9tICcuL2VudGl0eS11dGlscydcblxuZGVjbGFyZSBjb25zdCBlbnRpdHlTeW1ib2w6IHVuaXF1ZSBzeW1ib2xcbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBFbnRpdHkgPSBudW1iZXIgJiB7IFtlbnRpdHlTeW1ib2xdOiB0cnVlIH1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGl0eUNvbnRhaW5lcigpIHtcbiAgY29uc3Qgc3RhdGljRW50aXR5ID0gRW50aXR5KEVudGl0eVV0aWxzLlNUQVRJQ19FTlRJVElFU19SQU5HRSlcbiAgY29uc3QgZHluYW1pY0VudGl0eSA9IEVudGl0eShFbnRpdHlVdGlscy5EWU5BTUlDX0VOVElUSUVTX1JBTkdFKVxuICByZXR1cm4ge1xuICAgIGdlbmVyYXRlRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSk6IEVudGl0eSB7XG4gICAgICBpZiAoZHluYW1pYykge1xuICAgICAgICByZXR1cm4gZHluYW1pY0VudGl0eS5nZW5lcmF0ZUVudGl0eSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RhdGljRW50aXR5LmdlbmVyYXRlRW50aXR5KClcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3RhdGljRW50aXR5LnJlbW92ZUVudGl0eShlbnRpdHkpIHx8IGR5bmFtaWNFbnRpdHkucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgICAgIClcbiAgICB9LFxuICAgIGlzRW50aXR5RXhpc3RzKGVudGl0eTogRW50aXR5KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBFbnRpdHlVdGlscy5pc1Jlc2VydmVkRW50aXR5KGVudGl0eSkgfHxcbiAgICAgICAgc3RhdGljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKS5oYXMoZW50aXR5KSB8fFxuICAgICAgICBkeW5hbWljRW50aXR5LmdldEV4aXN0aW5nRW50aXRpZXMoKS5oYXMoZW50aXR5KVxuICAgICAgKVxuICAgIH0sXG4gICAgZ2V0RXhpc3RpbmdFbnRpdGllcygpOiBTZXQ8RW50aXR5PiB7XG4gICAgICByZXR1cm4gbmV3IFNldChbXG4gICAgICAgIC4uLnN0YXRpY0VudGl0eS5nZXRFeGlzdGluZ0VudGl0aWVzKCksXG4gICAgICAgIC4uLmR5bmFtaWNFbnRpdHkuZ2V0RXhpc3RpbmdFbnRpdGllcygpXG4gICAgICBdKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBFbnRpdHkocmFuZ2U6IEVudGl0eVV0aWxzLkVudGl0eVJhbmdlKSB7XG4gIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShlbnRpdHk6IG51bWJlcik6IEVudGl0eSB7XG4gICAgcmV0dXJuIGVudGl0eSBhcyBFbnRpdHlcbiAgfVxuXG4gIGxldCBlbnRpdHlDb3VudGVyID0gcmFuZ2VbMF1cbiAgY29uc3QgdXNlZEVudGl0aWVzOiBTZXQ8RW50aXR5PiA9IG5ldyBTZXQoKVxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlRW50aXR5KCk6IEVudGl0eSB7XG4gICAgaWYgKGVudGl0eUNvdW50ZXIgPj0gcmFuZ2VbMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEl0IGZhaWxzIHRyeWluZyB0byBnZW5lcmF0ZSBhbiBlbnRpdHkgb3V0IG9mIHJhbmdlIFske3JhbmdlWzBdfSwgJHtyYW5nZVsxXX1dLmBcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHkgPSBjcmVhdGVFbnRpdHkoZW50aXR5Q291bnRlcilcbiAgICBlbnRpdHlDb3VudGVyKytcblxuICAgIHVzZWRFbnRpdGllcy5hZGQoZW50aXR5KVxuICAgIHJldHVybiBlbnRpdHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZUVudGl0eShlbnRpdHk6IEVudGl0eSkge1xuICAgIHJldHVybiB1c2VkRW50aXRpZXMuZGVsZXRlKGVudGl0eSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ2V0RXhpc3RpbmdFbnRpdGllcygpIHtcbiAgICAgIHJldHVybiBuZXcgU2V0KHVzZWRFbnRpdGllcylcbiAgICB9LFxuICAgIGdlbmVyYXRlRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eVxuICB9XG59XG4iLCIvKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgVXBkYXRlID0gKGR0OiBudW1iZXIpID0+IHZvaWRcblxuZXhwb3J0IGNvbnN0IFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSA9IDEwMGUzXG5cbnR5cGUgU3lzdGVtSXRlbSA9IHtcbiAgZm46IFVwZGF0ZVxuICBwcmlvcml0eTogbnVtYmVyXG4gIG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN5c3RlbUNvbnRhaW5lcigpIHtcbiAgY29uc3Qgc3lzdGVtczogU3lzdGVtSXRlbVtdID0gW11cblxuICBmdW5jdGlvbiBzb3J0KCkge1xuICAgIHN5c3RlbXMuc29ydCgoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpXG4gIH1cblxuICBmdW5jdGlvbiBhZGQoZm46IFVwZGF0ZSwgcHJpb3JpdHk6IG51bWJlciwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzeXN0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZm4gPT09IGZuKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gYWxyZWFkeSBhZGRlZCcpXG4gICAgfSBlbHNlIGlmIChuYW1lICYmIHN5c3RlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeXN0ZW0gbmFtZSBhbHJlYWR5IHVzZWQnKVxuICAgIH1cblxuICAgIHN5c3RlbXMucHVzaCh7XG4gICAgICBmbixcbiAgICAgIHByaW9yaXR5LFxuICAgICAgbmFtZVxuICAgIH0pXG4gICAgc29ydCgpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUoc2VsZWN0b3I6IHN0cmluZyB8IFVwZGF0ZSkge1xuICAgIGxldCBpbmRleCA9IC0xXG5cbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgaW5kZXggPSBzeXN0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBzZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggPSBzeXN0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5mbiA9PT0gc2VsZWN0b3IpXG4gICAgfVxuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3lzdGVtcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgc29ydCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkLFxuICAgIHJlbW92ZSxcbiAgICBnZXRTeXN0ZW1zKCkge1xuICAgICAgcmV0dXJuIHN5c3RlbXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGRlZmluZVNka0NvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgU2NoZW1hcyB9IGZyb20gJy4uL3NjaGVtYXMnXG5pbXBvcnQgeyBJU2NoZW1hIH0gZnJvbSAnLi4vc2NoZW1hcy9JU2NoZW1hJ1xuaW1wb3J0IHsgUmVzdWx0LCBTcGVjIH0gZnJvbSAnLi4vc2NoZW1hcy9NYXAnXG5pbXBvcnQgeyBCeXRlQnVmZmVyIH0gZnJvbSAnLi4vc2VyaWFsaXphdGlvbi9CeXRlQnVmZmVyJ1xuaW1wb3J0IHsgY3JkdFNjZW5lU3lzdGVtIH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0J1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50RGVmaW5pdGlvbixcbiAgQ29tcG9uZW50VHlwZSxcbiAgZGVmaW5lQ29tcG9uZW50IGFzIGRlZkNvbXBvbmVudFxufSBmcm9tICcuL2NvbXBvbmVudCdcbmltcG9ydCB7IEVudGl0eSwgRW50aXR5Q29udGFpbmVyIH0gZnJvbSAnLi9lbnRpdHknXG5pbXBvcnQgeyBTeXN0ZW1Db250YWluZXIsIFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSwgVXBkYXRlIH0gZnJvbSAnLi9zeXN0ZW1zJ1xuaW1wb3J0IHR5cGUgeyBJRW5naW5lUGFyYW1zIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IElFbmdpbmUgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgUmVhZG9ubHlDb21wb25lbnRTY2hlbWEgfSBmcm9tICcuL3JlYWRvbmx5J1xuXG5leHBvcnQgKiBmcm9tICcuL3JlYWRvbmx5J1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcydcbmV4cG9ydCB7IENvbXBvbmVudFR5cGUsIEVudGl0eSwgQnl0ZUJ1ZmZlciwgQ29tcG9uZW50RGVmaW5pdGlvbiB9XG5cbmZ1bmN0aW9uIHByZUVuZ2luZSgpIHtcbiAgY29uc3QgZW50aXR5Q29udGFpbmVyID0gRW50aXR5Q29udGFpbmVyKClcbiAgY29uc3QgY29tcG9uZW50c0RlZmluaXRpb24gPSBuZXcgTWFwPG51bWJlciwgQ29tcG9uZW50RGVmaW5pdGlvbjxhbnk+PigpXG4gIC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gbWFrZSB0aGlzIHdvcmsuXG4gIC8vIE1heWJlIGEgcHJveHkvY2FsbGJhY2sgdG8gYmUgdXAtdG8tZGF0ZVxuICBjb25zdCBlbnRpdGllc0NvbXBvbmVudCA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIFNldDxDb21wb25lbnREZWZpbml0aW9uPGFueT5bJ19pZCddPlxuICA+KClcbiAgY29uc3Qgc3lzdGVtcyA9IFN5c3RlbUNvbnRhaW5lcigpXG5cbiAgZnVuY3Rpb24gYWRkU3lzdGVtKFxuICAgIGZuOiBVcGRhdGUsXG4gICAgcHJpb3JpdHk6IG51bWJlciA9IFNZU1RFTVNfUkVHVUxBUl9QUklPUklUWSxcbiAgICBuYW1lPzogc3RyaW5nXG4gICkge1xuICAgIHN5c3RlbXMuYWRkKGZuLCBwcmlvcml0eSwgbmFtZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVN5c3RlbShzZWxlY3Rvcjogc3RyaW5nIHwgVXBkYXRlKSB7XG4gICAgcmV0dXJuIHN5c3RlbXMucmVtb3ZlKHNlbGVjdG9yKVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRW50aXR5KGR5bmFtaWM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8vIGVudGl0aWVzQ29tcG5vbmVudC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgY29uc3QgZW50aXR5ID0gZW50aXR5Q29udGFpbmVyLmdlbmVyYXRlRW50aXR5KGR5bmFtaWMpXG4gICAgcmV0dXJuIGVudGl0eVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkRHluYW1pY0VudGl0eSgpIHtcbiAgICByZXR1cm4gYWRkRW50aXR5KHRydWUpXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVFbnRpdHkoZW50aXR5OiBFbnRpdHkpIHtcbiAgICBmb3IgKGNvbnN0IFssIGNvbXBvbmVudF0gb2YgY29tcG9uZW50c0RlZmluaXRpb24pIHtcbiAgICAgIGlmIChjb21wb25lbnQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgY29tcG9uZW50LmRlbGV0ZUZyb20oZW50aXR5KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHlDb250YWluZXIucmVtb3ZlRW50aXR5KGVudGl0eSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudEZyb21TY2hlbWE8XG4gICAgVCBleHRlbmRzIElTY2hlbWEsXG4gICAgQ29uc3RydWN0b3JUeXBlID0gQ29tcG9uZW50VHlwZTxUPlxuICA+KFxuICAgIHNwZWM6IFQsXG4gICAgY29tcG9uZW50SWQ6IG51bWJlcixcbiAgICBjb25zdHJ1Y3RvckRlZmF1bHQ/OiBDb25zdHJ1Y3RvclR5cGVcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxULCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgICBpZiAoY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgJHtjb21wb25lbnRJZH0gYWxyZWFkeSBkZWNsYXJlZGApXG4gICAgfVxuICAgIGNvbnN0IG5ld0NvbXBvbmVudCA9IGRlZkNvbXBvbmVudDxULCBDb25zdHJ1Y3RvclR5cGU+KFxuICAgICAgY29tcG9uZW50SWQsXG4gICAgICBzcGVjLFxuICAgICAgY29uc3RydWN0b3JEZWZhdWx0XG4gICAgKVxuICAgIGNvbXBvbmVudHNEZWZpbml0aW9uLnNldChjb21wb25lbnRJZCwgbmV3Q29tcG9uZW50KVxuICAgIHJldHVybiBuZXdDb21wb25lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXBvbmVudDxcbiAgICBUIGV4dGVuZHMgU3BlYyxcbiAgICBDb25zdHJ1Y3RvclR5cGUgPSBQYXJ0aWFsPFJlc3VsdDxUPj5cbiAgPihcbiAgICBzcGVjOiBULFxuICAgIGNvbXBvbmVudElkOiBudW1iZXIsXG4gICAgY29uc3RydWN0b3JEZWZhdWx0PzogQ29uc3RydWN0b3JUeXBlXG4gICk6IENvbXBvbmVudERlZmluaXRpb248SVNjaGVtYTxSZXN1bHQ8VD4+LCBDb25zdHJ1Y3RvclR5cGU+IHtcbiAgICByZXR1cm4gZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYShcbiAgICAgIFNjaGVtYXMuTWFwKHNwZWMpLFxuICAgICAgY29tcG9uZW50SWQsXG4gICAgICBjb25zdHJ1Y3RvckRlZmF1bHRcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb21wb25lbnQ8VCBleHRlbmRzIElTY2hlbWE+KFxuICAgIGNvbXBvbmVudElkOiBudW1iZXJcbiAgKTogQ29tcG9uZW50RGVmaW5pdGlvbjxUPiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c0RlZmluaXRpb24uZ2V0KGNvbXBvbmVudElkKVxuICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdDb21wb25lbnQgbm90IGZvdW5kLiBZb3UgbmVlZCB0byBkZWNsYXJlIHRoZSBjb21wb25lbnRzIGF0IHRoZSBiZWdpbm5pZyBvZiB0aGUgZW5naW5lIGRlY2xhcmF0aW9uJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0RW50aXRpZXNXaXRoPFxuICAgIFQgZXh0ZW5kcyBbQ29tcG9uZW50RGVmaW5pdGlvbiwgLi4uQ29tcG9uZW50RGVmaW5pdGlvbltdXVxuICA+KC4uLmNvbXBvbmVudHM6IFQpOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5SZWFkb25seUNvbXBvbmVudFNjaGVtYTxUPl0+IHtcbiAgICBmb3IgKGNvbnN0IFtlbnRpdHksIC4uLmdyb3VwQ29tcF0gb2YgZ2V0Q29tcG9uZW50RGVmR3JvdXAoLi4uY29tcG9uZW50cykpIHtcbiAgICAgIHlpZWxkIFtlbnRpdHksIC4uLmdyb3VwQ29tcC5tYXAoKGMpID0+IGMuZ2V0KGVudGl0eSkpXSBhcyBbXG4gICAgICAgIEVudGl0eSxcbiAgICAgICAgLi4uUmVhZG9ubHlDb21wb25lbnRTY2hlbWE8VD5cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiogZ2V0Q29tcG9uZW50RGVmR3JvdXA8VCBleHRlbmRzIENvbXBvbmVudERlZmluaXRpb25bXT4oXG4gICAgLi4uYXJnczogVFxuICApOiBJdGVyYWJsZTxbRW50aXR5LCAuLi5UXT4ge1xuICAgIGNvbnN0IFtmaXJzdENvbXBvbmVudERlZiwgLi4uY29tcG9uZW50RGVmaW5pdGlvbnNdID0gYXJnc1xuICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZmlyc3RDb21wb25lbnREZWYuaXRlcmF0b3IoKSkge1xuICAgICAgbGV0IG1hdGNoZXMgPSB0cnVlXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiBjb21wb25lbnREZWZpbml0aW9ucykge1xuICAgICAgICBpZiAoIWNvbXBvbmVudERlZi5oYXMoZW50aXR5KSkge1xuICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgeWllbGQgW2VudGl0eSwgLi4uYXJnc11cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTeXN0ZW1zKCkge1xuICAgIHJldHVybiBzeXN0ZW1zLmdldFN5c3RlbXMoKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvbihjb21wb25lbnRJZDogbnVtYmVyKSB7XG4gICAgY29tcG9uZW50c0RlZmluaXRpb24uZGVsZXRlKGNvbXBvbmVudElkKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlbnRpdGllc0NvbXBvbmVudCxcbiAgICBjb21wb25lbnRzRGVmaW5pdGlvbixcbiAgICBhZGRFbnRpdHksXG4gICAgYWRkRHluYW1pY0VudGl0eSxcbiAgICByZW1vdmVFbnRpdHksXG4gICAgYWRkU3lzdGVtLFxuICAgIGdldFN5c3RlbXMsXG4gICAgcmVtb3ZlU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudCxcbiAgICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hLFxuICAgIGdldEVudGl0aWVzV2l0aCxcbiAgICBnZXRDb21wb25lbnQsXG4gICAgcmVtb3ZlQ29tcG9uZW50RGVmaW5pdGlvblxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBQcmVFbmdpbmUgPSBSZXR1cm5UeXBlPHR5cGVvZiBwcmVFbmdpbmU+XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gRW5naW5lKHsgdHJhbnNwb3J0cyB9OiBJRW5naW5lUGFyYW1zID0ge30pOiBJRW5naW5lIHtcbiAgY29uc3QgZW5naW5lID0gcHJlRW5naW5lKClcbiAgY29uc3QgY3JkdFN5c3RlbSA9IGNyZHRTY2VuZVN5c3RlbSh7IGVuZ2luZSwgdHJhbnNwb3J0czogdHJhbnNwb3J0cyB8fCBbXSB9KVxuICBjb25zdCBiYXNlQ29tcG9uZW50cyA9IGRlZmluZVNka0NvbXBvbmVudHMoZW5naW5lKVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZShkdDogbnVtYmVyKSB7XG4gICAgY3JkdFN5c3RlbS5yZWNlaXZlTWVzc2FnZXMoKVxuXG4gICAgZm9yIChjb25zdCBzeXN0ZW0gb2YgZW5naW5lLmdldFN5c3RlbXMoKSkge1xuICAgICAgc3lzdGVtLmZuKGR0KVxuICAgIH1cblxuICAgIC8vIFNlbGVjdGVkIGNvbXBvbmVudHMgdGhhdCBvbmx5IGV4aXN0IG9uZSBmcmFtZVxuICAgIC8vICB0aGVuLCB0aGV5IGFyZSBkZWxldGVkIGJ1dCB0aGVpciBjcmR0IHN0YXRlIGtlZXBzXG4gICAgY29uc3QgcmVtb3ZlU2VsZWN0ZWRDb21wb25lbnRzID0gW1xuICAgICAgYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdCxcbiAgICAgIGJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG4gICAgXVxuICAgIGNvbnN0IGV4Y2x1ZGVDb21wb25lbnRJZHMgPSByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMubWFwKChpdGVtKSA9PiBpdGVtLl9pZClcbiAgICBmb3IgKGNvbnN0IGNvbXBvbmVudERlZiBvZiByZW1vdmVTZWxlY3RlZENvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW2VudGl0eV0gb2YgZW5naW5lLmdldEVudGl0aWVzV2l0aChjb21wb25lbnREZWYpKSB7XG4gICAgICAgIGNvbXBvbmVudERlZi5kZWxldGVGcm9tKGVudGl0eSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBQZXJmIHRpcFxuICAgIC8vIFNob3VsZCB3ZSBhZGQgc29tZSBkaXJ0eUl0ZXJhdG9yU2V0IGF0IGVuZ2luZSBsZXZlbCBzbyB3ZSBkb250IGhhdmVcbiAgICAvLyB0byBpdGVyYXRlIGFsbCB0aGUgY29tcG9uZW50IGRlZmluaXRpb25zIHRvIGdldCB0aGUgZGlydHkgb25lcyA/XG4gICAgY29uc3QgZGlydHlTZXQgPSBuZXcgTWFwPEVudGl0eSwgU2V0PG51bWJlcj4+KClcbiAgICBmb3IgKGNvbnN0IFtjb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBpZiAoZXhjbHVkZUNvbXBvbmVudElkcy5pbmNsdWRlcyhjb21wb25lbnRJZCkpIGNvbnRpbnVlXG5cbiAgICAgIGZvciAoY29uc3QgZW50aXR5IG9mIGRlZmluaXRpb24uZGlydHlJdGVyYXRvcigpKSB7XG4gICAgICAgIGlmICghZGlydHlTZXQuaGFzKGVudGl0eSkpIHtcbiAgICAgICAgICBkaXJ0eVNldC5zZXQoZW50aXR5LCBuZXcgU2V0KCkpXG4gICAgICAgIH1cbiAgICAgICAgZGlydHlTZXQuZ2V0KGVudGl0eSkhLmFkZChjb21wb25lbnRJZClcbiAgICAgIH1cbiAgICB9XG4gICAgY3JkdFN5c3RlbS5jcmVhdGVNZXNzYWdlcyhkaXJ0eVNldClcblxuICAgIGZvciAoY29uc3QgW19jb21wb25lbnRJZCwgZGVmaW5pdGlvbl0gb2YgZW5naW5lLmNvbXBvbmVudHNEZWZpbml0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmNsZWFyRGlydHkoKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkRW50aXR5OiBlbmdpbmUuYWRkRW50aXR5LFxuICAgIGFkZER5bmFtaWNFbnRpdHk6IGVuZ2luZS5hZGREeW5hbWljRW50aXR5LFxuICAgIHJlbW92ZUVudGl0eTogZW5naW5lLnJlbW92ZUVudGl0eSxcbiAgICBhZGRTeXN0ZW06IGVuZ2luZS5hZGRTeXN0ZW0sXG4gICAgcmVtb3ZlU3lzdGVtOiBlbmdpbmUucmVtb3ZlU3lzdGVtLFxuICAgIGRlZmluZUNvbXBvbmVudDogZW5naW5lLmRlZmluZUNvbXBvbmVudCxcbiAgICBkZWZpbmVDb21wb25lbnRGcm9tU2NoZW1hOiBlbmdpbmUuZGVmaW5lQ29tcG9uZW50RnJvbVNjaGVtYSxcbiAgICBnZXRFbnRpdGllc1dpdGg6IGVuZ2luZS5nZXRFbnRpdGllc1dpdGgsXG4gICAgZ2V0Q29tcG9uZW50OiBlbmdpbmUuZ2V0Q29tcG9uZW50LFxuICAgIHJlbW92ZUNvbXBvbmVudERlZmluaXRpb246IGVuZ2luZS5yZW1vdmVDb21wb25lbnREZWZpbml0aW9uLFxuICAgIHVwZGF0ZSxcbiAgICBiYXNlQ29tcG9uZW50c1xuICB9XG59XG4iLCIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGVudW0gRUNTQ29tcG9uZW50SURzIHtcblx0VHJhbnNmb3JtID0gMSxcblx0QW5pbWF0b3IgPSAxMDQyLFxuXHRBdWRpb1NvdXJjZSA9IDEwMjAsXG5cdEF2YXRhckF0dGFjaCA9IDEwNzMsXG5cdEF2YXRhck1vZGlmaWVyQXJlYSA9IDEwNzAsXG5cdEF2YXRhclNoYXBlID0gMTA4MCxcblx0QmlsbGJvYXJkID0gMTA5MCxcblx0Qm94U2hhcGUgPSAxMDEzLFxuXHRDYW1lcmFNb2RlID0gMTA3Mixcblx0Q2FtZXJhTW9kZUFyZWEgPSAxMDcxLFxuXHRDeWxpbmRlclNoYXBlID0gMTAxNixcblx0R0xURlNoYXBlID0gMTA0MSxcblx0TWF0ZXJpYWwgPSAxMDE3LFxuXHRNZXNoQ29sbGlkZXIgPSAxMDE5LFxuXHRNZXNoUmVuZGVyZXIgPSAxMDE4LFxuXHRORlRTaGFwZSA9IDEwNDAsXG5cdE9uUG9pbnRlckRvd24gPSAxMDYwLFxuXHRPblBvaW50ZXJEb3duUmVzdWx0ID0gMTA2Nixcblx0T25Qb2ludGVyVXAgPSAxMDYxLFxuXHRPblBvaW50ZXJVcFJlc3VsdCA9IDEwNjUsXG5cdFBsYW5lU2hhcGUgPSAxMDE0LFxuXHRQb2ludGVyTG9jayA9IDEwNzQsXG5cdFNwaGVyZVNoYXBlID0gMTAxNSxcblx0VGV4dFNoYXBlID0gMTAzMCxcblx0VWlUZXh0ID0gMTA1Mixcblx0VmlzaWJpbGl0eUNvbXBvbmVudCA9IDEwODEsXG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgRUNTQ29tcG9uZW50SURzIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9nZW5lcmF0ZWQvaWRzLmdlbidcblxuY29uc3QgY29tcG9uZW50SWRzID0gT2JqZWN0LnZhbHVlcyhFQ1NDb21wb25lbnRJRHMpXG4gIC5maWx0ZXIoKGEpID0+IHR5cGVvZiBhID09PSAnbnVtYmVyJylcbiAgLm1hcChOdW1iZXIpXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICBpZiAodHlwZW9mIGRjbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHdpdGggbmV3IHJwY1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYW5ub3QgY3JlYXRlIGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IHdpdGhvdXQgZ2xvYmFsIGRjbCBvYmplY3QnXG4gICAgKVxuICB9XG5cbiAgY29uc3QgdHlwZSA9ICdyZW5kZXJlcidcbiAgcmV0dXJuIHtcbiAgICB0eXBlLFxuICAgIHNlbmQobWVzc2FnZTogVWludDhBcnJheSk6IHZvaWQge1xuICAgICAgLy8gVE9ETzogcmVwbGFjZSB3aXRoIG5ldyBycGNcbiAgICAgIGRjbFxuICAgICAgICAuY2FsbFJwYygnfnN5c3RlbS9FeHBlcmltZW50YWxBUEknLCAnc2VuZFRvUmVuZGVyZXInLCBbXG4gICAgICAgICAgeyBkYXRhOiBuZXcgVWludDhBcnJheShtZXNzYWdlKSB9XG4gICAgICAgIF0pXG4gICAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgfSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSk6IGJvb2xlYW4ge1xuICAgICAgLy8gRWNobyBtZXNzYWdlLCBpZ25vcmUgdGhlbVxuICAgICAgaWYgKG1lc3NhZ2UudHJhbnNwb3J0VHlwZSA9PT0gdHlwZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzZW5kIHJlbmRlcmVyIGNvbXBvbmVudHMgKFByb3RvIEdlbmVyYXRlZClcbiAgICAgIGlmICghY29tcG9uZW50SWRzLmluY2x1ZGVzKG1lc3NhZ2UuY29tcG9uZW50SWQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFtZXNzYWdlXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBUcmFuc3BvcnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTmV0d29ya1RyYW5zcG9ydCgpOiBUcmFuc3BvcnQge1xuICAvLyBjb25zdCBycGMgPSBuZXcgUnBjVHJhbnNwb3J0KClcbiAgZnVuY3Rpb24gc2VuZCguLi5fYXJnczogYW55W10pIHtcbiAgICAvLyBjb25zb2xlLmxvZygnTmV0d29ya01lc3NhZ2UgU2VudDogJywgLi4uYXJncylcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSAnbmV0d29yay10cmFuc3BvcnQnXG4gIHJldHVybiB7XG4gICAgc2VuZCxcbiAgICB0eXBlLFxuICAgIGZpbHRlcihtZXNzYWdlOiBUcmFuc3BvcnRNZXNzYWdlKTogYm9vbGVhbiB7XG4gICAgICAvLyBFY2hvIG1lc3NhZ2UsIGlnbm9yZSB0aGVtXG4gICAgICBpZiAobWVzc2FnZS50cmFuc3BvcnRUeXBlID09PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBTdGF0aWMgZW50aXRpZXMgJiBOZXR3b3JrIGNvbXBvbmVudHNcblxuICAgICAgcmV0dXJuICEhbWVzc2FnZSAvLyB2YWxpZENvbXBvbmVudHMuaW5jbHVkZXMoY29tcG9uZW50SWQpXG4gICAgfVxuICB9XG59XG4iLCIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkBkY2wvcG9zaXhcIiAvPlxuXG4vKipcbiAqIEBhbHBoYSAqIFRoaXMgZmlsZSBpbml0aWFsaXphdGlvbiBpcyBhbiBhbHBoYSBvbmUuIFRoaXMgaXMgYmFzZWQgb24gdGhlIG9sZC1lY3NcbiAqIGluaXQgYW5kIGl0J2xsIGJlIGNoYW5naW5nLlxuICovXG5cbmltcG9ydCB7IEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSdcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0L3RyYW5zcG9ydHMvcmVuZGVyZXJUcmFuc3BvcnQnXG5pbXBvcnQgeyBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0IH0gZnJvbSAnLi4vc3lzdGVtcy9jcmR0L3RyYW5zcG9ydHMvbmV0d29ya1RyYW5zcG9ydCdcblxuY29uc3QgcmVuZGVyZXJUcmFuc3BvcnQgPSBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCgpXG5leHBvcnQgY29uc3QgZW5naW5lID0gRW5naW5lKHtcbiAgdHJhbnNwb3J0czogW3JlbmRlcmVyVHJhbnNwb3J0LCBjcmVhdGVOZXR3b3JrVHJhbnNwb3J0KCldXG59KVxuXG5pZiAodHlwZW9mIGRjbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZGNsLmxvYWRNb2R1bGUoJ35zeXN0ZW0vRXhwZXJpbWVudGFsQVBJJywge30pLmNhdGNoKGRjbC5lcnJvcilcblxuICBhc3luYyBmdW5jdGlvbiBwdWxsUmVuZGVyZXJNZXNzYWdlcygpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRjbC5jYWxsUnBjKFxuICAgICAgJ35zeXN0ZW0vRXhwZXJpbWVudGFsQVBJJyxcbiAgICAgICdtZXNzYWdlRnJvbVJlbmRlcmVyJyxcbiAgICAgIFtdXG4gICAgKVxuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgaWYgKHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGJ5dGVBcnJheSBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgcmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKGJ5dGVBcnJheSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRjbC5vblVwZGF0ZSgoZHQ6IG51bWJlcikgPT4ge1xuICAgIHB1bGxSZW5kZXJlck1lc3NhZ2VzKClcbiAgICAgIC5jYXRjaChkY2wuZXJyb3IpXG4gICAgICAuZmluYWxseSgoKSA9PiBlbmdpbmUudXBkYXRlKGR0KSlcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGxvZyA9IGRjbC5sb2dcbmV4cG9ydCBjb25zdCBlcnJvciA9IGRjbC5lcnJvclxuIiwiaW1wb3J0IHsgSUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcydcblxuLyoqXG4gKiBUcmFuc2Zvcm0gcGFyZW50aW5nOiBjeWNsaWMgZGVwZW5kZW5jeSBjaGVja2VyXG4gKiBJdCBjaGVja3Mgb25seSBpbiBtb2RpZmllZCBUcmFuc2Zvcm1zXG4gKlxuICogQWRkIHRoaXMgc3lzdGVtIHdpdGg6XG4gKiBgYGB0c1xuICogIGVuZ2luZS5hZGRTeXN0ZW0oY3ljbGljUGFyZW50aW5nQ2hlY2tlcihlbmdpbmUpKVxuICogYGBgYFxuICogQW5kIHRoZW4gaXQgd2lsbCBjaGVjayBldmVyeSB0aWNrIHRoZSBwYXJlbnRpbmcuXG4gKlxuICogQHB1YmxpY1xuICpcbiAqIEBwYXJhbXMgZW5naW5lXG4gKiBAcmV0dXJucyBhIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3ljbGljUGFyZW50aW5nQ2hlY2tlcihlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZW50aXR5IG9mIFRyYW5zZm9ybS5kaXJ0eUl0ZXJhdG9yKCkpIHtcbiAgICAgIGxldCB0cmFuc2Zvcm0gPSBUcmFuc2Zvcm0uZ2V0T3JOdWxsKGVudGl0eSlcbiAgICAgIHdoaWxlICh0cmFuc2Zvcm0gJiYgdHJhbnNmb3JtLnBhcmVudCkge1xuICAgICAgICBpZiAodHJhbnNmb3JtLnBhcmVudCA9PT0gZW50aXR5KSB7XG4gICAgICAgICAgZGNsLmVycm9yKGBUaGVyZSBpcyBhIGN5Y2xpYyBwYXJlbnQgd2l0aCBlbnRpdHkgJHtlbnRpdHl9YClcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zZm9ybSA9IFRyYW5zZm9ybS5nZXRPck51bGwodHJhbnNmb3JtLnBhcmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcblxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBUcmFuc2Zvcm0gPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVHJhbnNmb3JtXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEFuaW1hdG9yID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkFuaW1hdG9yXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEF2YXRhckF0dGFjaCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJBdHRhY2hcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgQXZhdGFyTW9kaWZpZXJBcmVhID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF2YXRhck1vZGlmaWVyQXJlYVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBCaWxsYm9hcmQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQmlsbGJvYXJkXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEJveFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJveFNoYXBlXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBDYW1lcmFNb2RlQXJlYSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5DYW1lcmFNb2RlQXJlYVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBDeWxpbmRlclNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkN5bGluZGVyU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBNYXRlcmlhbCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NYXRlcmlhbFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBNZXNoQ29sbGlkZXIgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWVzaENvbGxpZGVyXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgTkZUU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTkZUU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgT25Qb2ludGVyRG93biA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJEb3duXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBPblBvaW50ZXJVcFJlc3VsdCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5PblBvaW50ZXJVcFJlc3VsdFxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgUG9pbnRlckxvY2sgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuUG9pbnRlckxvY2tcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgU3BoZXJlU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuU3BoZXJlU2hhcGVcbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBVaVRleHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVWlUZXh0XG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb21wb25lbnQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuVmlzaWJpbGl0eUNvbXBvbmVudFxuIiwiaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnLi4vLi4vcnVudGltZS9pbml0aWFsaXphdGlvbidcbi8qKiBAcHVibGljICovXG5leHBvcnQgbmFtZXNwYWNlIENvbXBvbmVudHMge1xuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVHJhbnNmb3JtID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRyYW5zZm9ybVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQW5pbWF0b3IgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQW5pbWF0b3Jcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEF1ZGlvU291cmNlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkF1ZGlvU291cmNlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJBdHRhY2ggPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyQXR0YWNoXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJNb2RpZmllckFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQXZhdGFyTW9kaWZpZXJBcmVhXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBBdmF0YXJTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5BdmF0YXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQmlsbGJvYXJkID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkJpbGxib2FyZFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQm94U2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQm94U2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IENhbWVyYU1vZGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgQ2FtZXJhTW9kZUFyZWEgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ2FtZXJhTW9kZUFyZWFcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IEN5bGluZGVyU2hhcGUgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuQ3lsaW5kZXJTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgR0xURlNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLkdMVEZTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgTWF0ZXJpYWwgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuTWF0ZXJpYWxcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hDb2xsaWRlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoQ29sbGlkZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE1lc2hSZW5kZXJlciA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5NZXNoUmVuZGVyZXJcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE5GVFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk5GVFNoYXBlXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBPblBvaW50ZXJEb3duID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlckRvd25cblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlckRvd25SZXN1bHQgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyRG93blJlc3VsdFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgT25Qb2ludGVyVXAgPSBlbmdpbmUuYmFzZUNvbXBvbmVudHMuT25Qb2ludGVyVXBcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IE9uUG9pbnRlclVwUmVzdWx0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLk9uUG9pbnRlclVwUmVzdWx0XG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBQbGFuZVNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBsYW5lU2hhcGVcblx0LyoqIEBwdWJsaWMgKi9cblx0ZXhwb3J0IGNvbnN0IFBvaW50ZXJMb2NrID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlBvaW50ZXJMb2NrXG5cdC8qKiBAcHVibGljICovXG5cdGV4cG9ydCBjb25zdCBTcGhlcmVTaGFwZSA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5TcGhlcmVTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVGV4dFNoYXBlID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlRleHRTaGFwZVxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVWlUZXh0ID0gZW5naW5lLmJhc2VDb21wb25lbnRzLlVpVGV4dFxuXHQvKiogQHB1YmxpYyAqL1xuXHRleHBvcnQgY29uc3QgVmlzaWJpbGl0eUNvbXBvbmVudCA9IGVuZ2luZS5iYXNlQ29tcG9uZW50cy5WaXNpYmlsaXR5Q29tcG9uZW50XG59XG4iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwidGhpcyIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwiZ2xvYmFsIiwiX20wIiwiQ09NUE9ORU5UX0lEIiwiZ2xvYmFsVGhpcyIsIkxvbmciLCJBbmltYXRvclNjaGVtYS5BbmltYXRvclNjaGVtYSIsIkFuaW1hdG9yU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF1ZGlvU291cmNlU2NoZW1hLkF1ZGlvU291cmNlU2NoZW1hIiwiQXVkaW9Tb3VyY2VTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQXZhdGFyQXR0YWNoU2NoZW1hLkF2YXRhckF0dGFjaFNjaGVtYSIsIkF2YXRhckF0dGFjaFNjaGVtYS5DT01QT05FTlRfSUQiLCJBdmF0YXJNb2RpZmllckFyZWFTY2hlbWEuQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hIiwiQXZhdGFyTW9kaWZpZXJBcmVhU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkF2YXRhclNoYXBlU2NoZW1hLkF2YXRhclNoYXBlU2NoZW1hIiwiQXZhdGFyU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQmlsbGJvYXJkU2NoZW1hLkJpbGxib2FyZFNjaGVtYSIsIkJpbGxib2FyZFNjaGVtYS5DT01QT05FTlRfSUQiLCJCb3hTaGFwZVNjaGVtYS5Cb3hTaGFwZVNjaGVtYSIsIkJveFNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkNhbWVyYU1vZGVTY2hlbWEuQ2FtZXJhTW9kZVNjaGVtYSIsIkNhbWVyYU1vZGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiQ2FtZXJhTW9kZUFyZWFTY2hlbWEuQ2FtZXJhTW9kZUFyZWFTY2hlbWEiLCJDYW1lcmFNb2RlQXJlYVNjaGVtYS5DT01QT05FTlRfSUQiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkN5bGluZGVyU2hhcGVTY2hlbWEiLCJDeWxpbmRlclNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIkdMVEZTaGFwZVNjaGVtYS5HTFRGU2hhcGVTY2hlbWEiLCJHTFRGU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTWF0ZXJpYWxTY2hlbWEuTWF0ZXJpYWxTY2hlbWEiLCJNYXRlcmlhbFNjaGVtYS5DT01QT05FTlRfSUQiLCJNZXNoQ29sbGlkZXJTY2hlbWEuTWVzaENvbGxpZGVyU2NoZW1hIiwiTWVzaENvbGxpZGVyU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk1lc2hSZW5kZXJlclNjaGVtYS5NZXNoUmVuZGVyZXJTY2hlbWEiLCJNZXNoUmVuZGVyZXJTY2hlbWEuQ09NUE9ORU5UX0lEIiwiTkZUU2hhcGVTY2hlbWEuTkZUU2hhcGVTY2hlbWEiLCJORlRTaGFwZVNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJEb3duU2NoZW1hLk9uUG9pbnRlckRvd25TY2hlbWEiLCJPblBvaW50ZXJEb3duU2NoZW1hLkNPTVBPTkVOVF9JRCIsIk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuT25Qb2ludGVyRG93blJlc3VsdFNjaGVtYSIsIk9uUG9pbnRlckRvd25SZXN1bHRTY2hlbWEuQ09NUE9ORU5UX0lEIiwiT25Qb2ludGVyVXBTY2hlbWEuT25Qb2ludGVyVXBTY2hlbWEiLCJPblBvaW50ZXJVcFNjaGVtYS5DT01QT05FTlRfSUQiLCJPblBvaW50ZXJVcFJlc3VsdFNjaGVtYS5PblBvaW50ZXJVcFJlc3VsdFNjaGVtYSIsIk9uUG9pbnRlclVwUmVzdWx0U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlBsYW5lU2hhcGVTY2hlbWEuUGxhbmVTaGFwZVNjaGVtYSIsIlBsYW5lU2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiUG9pbnRlckxvY2tTY2hlbWEuUG9pbnRlckxvY2tTY2hlbWEiLCJQb2ludGVyTG9ja1NjaGVtYS5DT01QT05FTlRfSUQiLCJTcGhlcmVTaGFwZVNjaGVtYS5TcGhlcmVTaGFwZVNjaGVtYSIsIlNwaGVyZVNoYXBlU2NoZW1hLkNPTVBPTkVOVF9JRCIsIlRleHRTaGFwZVNjaGVtYS5UZXh0U2hhcGVTY2hlbWEiLCJUZXh0U2hhcGVTY2hlbWEuQ09NUE9ORU5UX0lEIiwiVWlUZXh0U2NoZW1hLlVpVGV4dFNjaGVtYSIsIlVpVGV4dFNjaGVtYS5DT01QT05FTlRfSUQiLCJWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLlZpc2liaWxpdHlDb21wb25lbnRTY2hlbWEiLCJWaXNpYmlsaXR5Q29tcG9uZW50U2NoZW1hLkNPTVBPTkVOVF9JRCIsIlNjaGVtYXMiLCJpSW50NjQiLCJXaXJlTWVzc2FnZSIsImNyZHRQcm90b2NvbCIsIk1lc3NhZ2UiLCJkZWZDb21wb25lbnQiLCJkZWZpbmVDb21wb25lbnQiLCJDb21wb25lbnRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztHQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0dBQzlELE9BQWtCLENBQUEsT0FBQSxHQUFBLEtBQUssQ0FBQyxDQUFDO0dBS3pCLENBQUMsVUFBVSxPQUFPLEVBQUU7Q0FDcEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLE1BQU07Q0FDbkI7Q0FDQTtDQUNBO09BQ0ksQ0FBQyxHQUFHLENBQUM7Q0FDVDtDQUNBO0NBQ0E7T0FDSSxDQUFDLEdBQUcsQ0FBQztDQUNUO0NBQ0E7Q0FDQTtPQUNJLENBQUMsR0FBRyxDQUFDLEVBQUU7V0FDSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QjtDQUNMLE1BQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFO0NBQ25DLFVBQVEsT0FBTztlQUNILENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2VBQ3hCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO2VBQ3hCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0NBQ3BDLFdBQVMsQ0FBQztRQUNMO0NBQ0wsTUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUN0QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRTtDQUMzQyxVQUFRLE9BQU87ZUFDSCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztlQUMzQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztlQUMzQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztDQUN2QyxXQUFTLENBQUM7UUFDTDtDQUNMLE1BQUksT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDaEM7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTtXQUNoRCxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztXQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztXQUNwQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QztDQUNMLE1BQUksT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Q0FDMUM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtXQUNyQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRDtDQUNMLE1BQUksT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDaEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7Q0FDaEMsVUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7Q0FDMUIsVUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7Q0FDMUIsVUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDckI7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3hCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLEtBQUssQ0FBQyxNQUFNLEVBQUU7V0FDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQztDQUNMLE1BQUksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFO0NBQzVCLFVBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckY7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUU7V0FDM0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMxRTtDQUNMLE1BQUksT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENB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RUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztXQUMzQixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNqRDtDQUNBLFVBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDNUMsVUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM1QyxVQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzVDLFVBQVEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUM3QztDQUNBLFVBQVEsT0FBTztDQUNmLGNBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZELGNBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZELGNBQVksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQ3ZELFdBQVMsQ0FBQztRQUNMO0NBQ0wsTUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztDQUM1QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtPQUNJLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO1dBQzlCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1dBQy9CLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztXQUN0QyxPQUFPLE1BQU0sQ0FBQztRQUNqQjtDQUNMLE1BQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDeEI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7Q0FDbkQsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDO0NBQ3hELFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztDQUN4RCxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDbkQ7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0NBQ2xDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0NBQ2hDLFVBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1dBQzlCLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztXQUN4QyxPQUFPLE1BQU0sQ0FBQztRQUNqQjtDQUNMLE1BQUksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtDQUM3QyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUN2RCxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUN2RCxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsRDtDQUNMLE1BQUksT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Q0FDcEM7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLElBQUksR0FBRztXQUNaLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEM7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0NBQ3hCO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyxHQUFHLEdBQUc7V0FDWCxPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDO0NBQ0wsTUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUN0QjtDQUNBO0NBQ0E7Q0FDQTtPQUNJLFNBQVMsRUFBRSxHQUFHO1dBQ1YsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQztDQUNMLE1BQUksT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDcEI7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLElBQUksR0FBRztXQUNaLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQztDQUNMLE1BQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Q0FDeEI7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLE9BQU8sR0FBRztXQUNmLE9BQU8sTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEM7Q0FDTCxNQUFJLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQzlCO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyxRQUFRLEdBQUc7V0FDaEIsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDO0NBQ0wsTUFBSSxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztDQUNoQztDQUNBO0NBQ0E7Q0FDQTtPQUNJLFNBQVMsS0FBSyxHQUFHO1dBQ2IsT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoQztDQUNMLE1BQUksT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDMUI7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLElBQUksR0FBRztXQUNaLE9BQU8sTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqQztDQUNMLE1BQUksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdkIsRUFBWSxPQUFPLENBQUMsT0FBTyxLQUFLLE9BQWtCLENBQUEsT0FBQSxHQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDeEQsRUFBQTs7Ozs7Ozs7Ozs7O0NDalVBLENBQUEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDOUQsQ0FBYyxNQUFBLENBQUEsTUFBQSxHQUFHLEtBQUssQ0FBQyxDQUFDO0NBQ3hCO0NBQ0E7Q0FDQTtDQUNBLENBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDMUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxZQUFZLEVBQUU7Q0FDckQsS0FBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2xCLE9BQU8sQ0FBQyxPQUFPLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUM7R0FDNUM7Q0FDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ2QsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUMvQixLQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtVQUNULE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO09BQ3BDO0NBQ0wsS0FBSSxPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztHQUM1QjtDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUU7Q0FDckIsS0FBSSxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQztNQUN0QixJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1VBQy9CLE9BQU8sTUFBTSxDQUFDO09BQ2pCO01BQ0QsT0FBTyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztHQUM5QjtDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUU7Q0FDeEMsS0FBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7R0FDOUM7Q0FDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFO01BQ2pCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0dBQ3ZDO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtDQUMvQixLQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztHQUN0RDtDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUNoQyxPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7R0FDdEM7Q0FDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxXQUFXLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDdkMsT0FBTyxVQUFVLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUN6QztDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtNQUNqQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztDQUM5QyxLQUFJLElBQUksR0FBRyxHQUFHLEtBQUssRUFBRTtVQUNiLEdBQUcsSUFBSSxLQUFLLENBQUM7T0FDaEI7TUFDRCxPQUFPLEdBQUcsQ0FBQztHQUNkO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFO01BQzFCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO01BQ25DLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0dBQ3hDO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0NBQ2xDLEtBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQ3RCLEtBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ25DLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQ3BDO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0NBQ2hELEtBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2YsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUU7VUFDeEMsTUFBTSxHQUFHLE1BQU0sQ0FBQztPQUNuQjtXQUNJO0NBQ1QsU0FBUSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO09BQ3hEO01BQ0QsT0FBTyxNQUFNLENBQUM7R0FDakI7Q0FDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtNQUNqRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQzVDLEtBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO01BQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLFFBQVEsRUFBRTtVQUNuQyxNQUFNLEdBQUcsTUFBTSxDQUFDO09BQ25CO1dBQ0k7Q0FDVCxTQUFRLE1BQU0sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7T0FDMUQ7TUFDRCxPQUFPLE1BQU0sQ0FBQztHQUNqQjtDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtNQUM5QixPQUFPLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDO0dBQ3pDO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7TUFDbkMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDekMsS0FBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUU7VUFDYixHQUFHLElBQUksS0FBSyxDQUFDO09BQ2hCO01BQ0QsT0FBTyxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztHQUN0QztDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUNsQyxLQUFJLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztDQUNuQixLQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtDQUNqQixTQUFRLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pDO1dBQ0k7VUFDRCxNQUFNLEdBQUcsR0FBRyxDQUFDO09BQ2hCO01BQ0QsT0FBTyxNQUFNLENBQUM7R0FDakI7Q0FDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7Q0FDN0QsS0FBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQ3BDLEtBQUksTUFBTSxLQUFLLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztDQUNuQyxLQUFJLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7TUFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7TUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0NBQ2pELEtBQUksTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztDQUNsQyxLQUFJLE9BQU8sTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLFFBQVEsR0FBRyxLQUFLLEdBQUcsUUFBUSxHQUFHLEtBQUssQ0FBQztHQUNoRjtDQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUMvQixLQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtVQUNiLE9BQU8sR0FBRyxDQUFDO09BQ2Q7Q0FDTCxLQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7R0FDNUM7Q0FDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLENBQUEsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7TUFDbkMsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0dBQ3BDO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtNQUN2QyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO0dBQ3RDO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFO0NBQ2pDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxPQUFPLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxDQUFDO0dBQ2hFO0NBQ0Q7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQUEsQ0FBQSxNQUFjLEdBQUc7Q0FDakIsS0FBSSxhQUFhO0NBQ2pCLEtBQUksS0FBSztDQUNULEtBQUksSUFBSTtDQUNSLEtBQUksS0FBSztDQUNULEtBQUksSUFBSTtDQUNSLEtBQUksTUFBTTtDQUNWLEtBQUksU0FBUztDQUNiLEtBQUksV0FBVztDQUNmLEtBQUksVUFBVTtDQUNkLEtBQUksUUFBUTtDQUNaLEtBQUksVUFBVTtDQUNkLEtBQUksV0FBVztDQUNmLEtBQUksZ0JBQWdCO0NBQ3BCLEtBQUksSUFBSTtDQUNSLEtBQUksU0FBUztDQUNiLEtBQUksV0FBVztDQUNmLEtBQUksT0FBTztDQUNYLEtBQUksV0FBVztDQUNmLEtBQUksY0FBYztDQUNsQixLQUFJLGNBQWM7Q0FDbEIsS0FBSSxnQkFBZ0I7Q0FDcEIsS0FBSSxLQUFLO0NBQ1QsRUFBQyxDQUFDO0NBQ0YsQ0FBQTs7Ozs7Ozs7Ozs7O0dDOVRBLE1BQU0sQ0FBQyxjQUFjLENBQUEsT0FBQSxFQUFVLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0dBQzlELE9BQWtCLENBQUEsT0FBQSxHQUFBLE9BQUEsQ0FBQSxPQUFBLEdBQWtCLGtCQUFrQixPQUF3QixDQUFBLGFBQUEsR0FBQSxPQUFBLENBQUEsWUFBQSxHQUF1QixnQkFBZ0IsT0FBc0IsQ0FBQSxXQUFBLEdBQUEsS0FBSyxDQUFDLENBQUM7R0FNbEosQ0FBQyxVQUFVLFdBQVcsRUFBRTtDQUN4QjtDQUNBO0NBQ0E7T0FDSSxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztDQUM5QztPQUNJLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9DLEVBQWdCLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBc0IsQ0FBQSxXQUFBLEdBQUEsRUFBRSxDQUFDLENBQUMsQ0FBQztHQU1wRSxDQUFDLFVBQVUsS0FBSyxFQUFFO0NBQ2xCO09BQ0ksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7Q0FDeEM7T0FDSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztDQUN4QztPQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLEVBQVUsT0FBTyxDQUFDLEtBQUssS0FBSyxPQUFnQixDQUFBLEtBQUEsR0FBQSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xEO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsT0FBdUIsQ0FBQSxZQUFBLEdBQUEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMvQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsT0FBQSxDQUFBLGFBQUEsR0FBd0IsR0FBRyxDQUFDO0NBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsRUFBQSxPQUFBLENBQUEsT0FBQSxHQUFrQixRQUFRLENBQUM7Q0FDM0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxFQUFBLE9BQUEsQ0FBQSxPQUFBLEdBQWtCLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ2hDO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsT0FBa0IsQ0FBQSxPQUFBLEdBQUEsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDdEMsRUFBQTs7Ozs7Ozs7Ozs7R0NyREEsTUFBTSxDQUFDLGNBQWMsQ0FBQSxPQUFBLEVBQVUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7R0FDOUQsT0FBcUIsQ0FBQSxVQUFBLEdBQUEsS0FBSyxDQUFDLENBQUM7R0FDNUIsTUFBTSxTQUFTLEdBQUdBLGNBQUEsRUFBb0IsQ0FBQztHQUN2QyxNQUFNLFFBQVEsR0FBR0MsYUFBQSxFQUFtQixDQUFDO0dBQ3JDLE1BQU0sT0FBTyxHQUFHQyxjQUFBLEVBQWtCLENBQUM7R0FLbkMsQ0FBQyxVQUFVLFVBQVUsRUFBRTtDQUN2QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxNQUFNO0NBQ25CO09BQ0ksQ0FBQyxHQUFHLEdBQUc7Q0FDWDtPQUNJLENBQUMsR0FBRyxHQUFHO0NBQ1g7T0FDSSxDQUFDLEdBQUcsR0FBRztDQUNYO09BQ0ksQ0FBQyxHQUFHLEdBQUcsRUFBRTtXQUNMLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6QjtDQUNMLE1BQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDL0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0NBQ3pCLFVBQVEsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RTtDQUNMLE1BQUksVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDekI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0NBQ3BEO0NBQ0EsVUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0NBQ3RDLFVBQVEsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNsQyxVQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7V0FDNUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDOUIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztXQUMvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1dBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7V0FDOUIsT0FBTyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNySTtDQUNMLE1BQUksVUFBVSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0NBQzNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtPQUNJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1dBQ3BCLE9BQU8sb0JBQW9CLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RjtDQUNMLE1BQUksVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDN0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRTtXQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QztDQUNMLE1BQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDL0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRTtDQUM5QixVQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hEO0NBQ0wsTUFBSSxVQUFVLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztDQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7Q0FDOUIsVUFBUSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUN0RjtDQUNMLE1BQUksVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDekI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLE1BQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtXQUN6QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1dBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN6RTtDQUNMLE1BQUksVUFBVSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDN0I7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUU7V0FDOUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztDQUNwQyxVQUFRLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtlQUNYLE9BQU8sRUFBRSxDQUFDO1lBQ2I7Q0FDVCxVQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQztXQUM3QyxPQUFPLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdCO0NBQ0wsTUFBSSxVQUFVLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztDQUM3QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7V0FDNUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDeEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7Q0FDM0YsVUFBUSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7Q0FDakUsVUFBUSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFVBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUM1QixVQUFRLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDNUIsVUFBUSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0NBQzVCLFVBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztDQUM1QixVQUFRLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDNUIsVUFBUSxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0NBQ2pDLFVBQVEsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztDQUNqQyxVQUFRLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7V0FDekIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckMsVUFBUSxNQUFNLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQztDQUNwQyxVQUFRLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtlQUNWLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQzFDLGNBQVksVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ3JDLGNBQVksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7ZUFDaEIsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO2VBQ2pDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztlQUNqQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7ZUFDakMsT0FBTyxVQUFVLENBQUM7WUFDckI7V0FDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtDQUN0QyxjQUFZLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDeEQsY0FBWSxNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0NBQ3BDLGNBQVksVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO2VBQzFCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztlQUNsQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7ZUFDbEMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDO2VBQ2xDLE9BQU8sVUFBVSxDQUFDO1lBQ3JCO0NBQ1QsVUFBUSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUU7Q0FDdkIsY0FBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQ3hELGNBQVksTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztlQUN4QixVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7Q0FDOUMsY0FBWSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7ZUFDMUIsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDO2VBQ2xDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztlQUNsQyxPQUFPLFVBQVUsQ0FBQztZQUNyQjtDQUNULFVBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztDQUNwRCxVQUFRLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7V0FDeEIsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDO1dBQ2xDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztDQUMxQyxVQUFRLFVBQVUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztXQUMxQixVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUM7V0FDbEMsT0FBTyxVQUFVLENBQUM7UUFDckI7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0NBQzNDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUU7V0FDbEIsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNoQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzdFO0NBQ0wsTUFBSSxVQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztDQUNyQztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFO0NBQ25FO1dBQ1EsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDN0MsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDbkQsVUFBUSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDMUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztlQUMxRixTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDbEMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUU7Q0FDekQ7Q0FDQTtDQUNBO2VBQ1ksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU07Q0FDdkMsb0JBQWtCLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3RDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCO2dCQUNJO2VBQ0QsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUM7UUFDSjtDQUNMLE1BQUksVUFBVSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7Q0FDL0M7Q0FDQTtDQUNBO0NBQ0E7T0FDSSxTQUFTLFFBQVEsR0FBRztXQUNoQixPQUFPLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyQztDQUNMLE1BQUksVUFBVSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7Q0FDbkM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxNQUFJLFNBQVMsV0FBVyxDQUFDLENBQUMsRUFBRTtXQUNwQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQy9DO0NBQ0EsVUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDbkU7Q0FDQSxVQUFRLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDM0MsVUFBUSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxFQUFFO0NBQ2xDO2VBQ1ksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNoQyxjQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0MsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiO0NBQ1QsZUFBYSxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUU7Q0FDeEM7ZUFDWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Q0FDakMsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUMsY0FBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiO2dCQUNJO0NBQ2I7ZUFDWSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2VBQy9DLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztlQUNuRixHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEY7Q0FDVCxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQyxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQyxVQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztDQUNqQztDQUNBLFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQ25ELFVBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1dBQzNDLE9BQU8sR0FBRyxDQUFDO1FBQ2Q7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0NBQ3pDO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO09BQ0ksU0FBUyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDakU7Q0FDQSxVQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7Q0FDdEMsVUFBUSxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0NBQ2xDLFVBQVEsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztXQUM1QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQy9CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDN0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztXQUM5QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1dBQy9CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7V0FDN0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztDQUN0QyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Q0FDL0MsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0NBQy9DLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztDQUMvQyxVQUFRLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDMUM7Q0FDTCxNQUFJLFVBQVUsQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztDQUNyRTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsTUFBSSxTQUFTLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7Q0FDckQsVUFBUSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0NBQy9CO1dBQ1EsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMs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QUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO0NBQzdDLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakYsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xGLFVBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDakYsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFO0NBQ0wsTUFBSSxVQUFVLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztDQUM3QyxNQUFJLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7V0FDOUIsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Q0FDekQsY0FBWSxPQUFPLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQztDQUNULFVBQVEsTUFBTSxNQUFNLEdBQUcsUUFBUSxFQUFFLENBQUM7V0FDMUIsSUFBSSxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7V0FDeEMsT0FBTyxJQUFJLEdBQUcsQ0FBQztXQUNmLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3JELFVBQVEsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Q0FDaEUsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDeEIsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDeEIsVUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7V0FDaEIsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3JDLFVBQVEsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUI7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0NBQ3JDO0NBQ0E7Q0FDQTtPQUNJLFNBQVMsSUFBSSxHQUFHO1dBQ1osT0FBTyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckM7Q0FDTCxNQUFJLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQzFCLEVBQWUsT0FBTyxDQUFDLFVBQVUsS0FBSyxPQUFxQixDQUFBLFVBQUEsR0FBQSxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2pFLEVBQUE7Ozs7Ozs7Ozs7O0dDdGFBLElBQUksZUFBZSxHQUFHLENBQUNDLGNBQUksSUFBSUEsY0FBSSxDQUFDLGVBQWUsTUFBTSxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO09BQzVGLElBQUksRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQzdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLEtBQUssU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7T0FDeEIsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDN0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztDQUNKLEVBQUEsSUFBSSxZQUFZLEdBQUcsQ0FBQ0EsY0FBSSxJQUFJQSxjQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRTtDQUN2RSxNQUFJLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Q0FDOUgsR0FBQyxDQUFDO0dBQ0YsTUFBTSxDQUFDLGNBQWMsQ0FBQSxPQUFBLEVBQVUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDOUQsRUFBQSxZQUFZLENBQUNILGlCQUFBLEVBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDL0MsRUFBQSxZQUFZLENBQUNDLGNBQUEsRUFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUM1QyxFQUFBLFlBQVksQ0FBQ0MsY0FBQSxFQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQzFDLEVBQUEsWUFBWSxDQUFDRSxhQUFBLEVBQWtCLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDMUMsRUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQ2ZBLENBQWMsU0FBQSxHQUFHLFNBQVMsQ0FBQztBQUMzQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLGdCQUFnQjtNQUN0QyxJQUFJLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztVQUN6QyxNQUFNLElBQUksQ0FBQztVQUNYLEtBQUssS0FBSyxDQUFDO1VBQ1gsT0FBTyxHQUFHLElBQUksQ0FBQztDQUN2QixLQUFJLE9BQU8sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNO1VBQzNCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO01BQzFDLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtVQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxRQUFRLENBQUMsR0FBRyxnQkFBZ0I7Y0FDbEQsSUFBSSxPQUFPLEVBQUU7a0JBQ1QsT0FBTyxHQUFHLEtBQUssQ0FBQztDQUNoQyxpQkFBZ0IsSUFBSSxHQUFHO0NBQ3ZCLHFCQUFvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7dUJBQ1g7c0JBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7MEJBQ3hDLE1BQU0sR0FBRyxDQUFDLENBQUM7Q0FDbkMscUJBQW9CLE9BQU8sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNOzBCQUN6QixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7c0JBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO21CQUMvQjtlQUNKO0NBQ2IsVUFBUyxDQUFDO0NBQ1YsU0FBUSxJQUFJO2NBQ0EsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQ2pDLENBQUMsT0FBTyxHQUFHLEVBQUU7Y0FDVixJQUFJLE9BQU8sRUFBRTtrQkFDVCxPQUFPLEdBQUcsS0FBSyxDQUFDO0NBQ2hDLGlCQUFnQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7ZUFDZjtXQUNKO0NBQ1QsTUFBSyxDQUFDLENBQUM7Q0FDUCxFQUFBOzs7Ozs7Ozs7Ozs7QUNsREE7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0dBQ0EsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3JCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Q0FDeEMsTUFBSSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO09BQ3RCLElBQUksQ0FBQyxDQUFDO1dBQ0YsT0FBTyxDQUFDLENBQUM7Q0FDakIsTUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDZCxNQUFJLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUc7V0FDMUMsRUFBRSxDQUFDLENBQUM7Q0FDWixNQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDaEQsR0FBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBLEVBQUEsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEI7Q0FDQTtDQUNBLEVBQUEsSUFBSSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekI7Q0FDQTtDQUNBLEVBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUU7Q0FDdEIsTUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDekY7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtHQUNBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7T0FDaEQsSUFBSSxLQUFLLEdBQUcsSUFBSTtXQUNaLEtBQUssR0FBRyxFQUFFLENBQUM7T0FDZixJQUFJLENBQUMsR0FBRyxDQUFDO1dBQ0wsQ0FBQyxHQUFHLENBQUM7Q0FDYixVQUFRLENBQUMsQ0FBQztDQUNWLE1BQUksT0FBTyxLQUFLLEdBQUcsR0FBRyxFQUFFO1dBQ2hCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ2hDLFVBQVEsUUFBUSxDQUFDO0NBQ2pCLGNBQVksS0FBSyxDQUFDO0NBQ2xCLGtCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO21CQUN6QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzttQkFDakIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtDQUN0QixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7bUJBQzdCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO21CQUNsQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLGtCQUFnQixNQUFNO0NBQ3RCLGNBQVksS0FBSyxDQUFDO0NBQ2xCLGtCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztDQUM3QyxrQkFBZ0IsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzttQkFDekIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtZQUNiO0NBQ1QsVUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7ZUFDVixDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2VBQ3ZFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVDtRQUNKO09BQ0QsSUFBSSxDQUFDLEVBQUU7V0FDSCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDNUIsVUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7V0FDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQztDQUNuQixjQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QjtPQUNELElBQUksS0FBSyxFQUFFO0NBQ2YsVUFBUSxJQUFJLENBQUM7ZUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDN0UsVUFBUSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekI7Q0FDTCxNQUFJLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDaEUsR0FBQyxDQUFDO0FBQ0Y7R0FDQSxJQUFJLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQztBQUN6QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7R0FDQSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0NBQ3hELE1BQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDO09BQ25CLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDYixVQUFRLENBQUMsQ0FBQztPQUNOLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHO1dBQ2hDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUN2QyxVQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUM3QixjQUFZLE1BQU07V0FDVixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxTQUFTO0NBQ3RDLGNBQVksTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7Q0FDekMsVUFBUSxRQUFRLENBQUM7Q0FDakIsY0FBWSxLQUFLLENBQUM7bUJBQ0YsQ0FBQyxHQUFHLENBQUMsQ0FBQzttQkFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLGtCQUFnQixNQUFNO0NBQ3RCLGNBQVksS0FBSyxDQUFDO0NBQ2xCLGtCQUFnQixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7bUJBQzFDLENBQUMsR0FBRyxDQUFDLENBQUM7bUJBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN0QixrQkFBZ0IsTUFBTTtDQUN0QixjQUFZLEtBQUssQ0FBQztDQUNsQixrQkFBZ0IsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO21CQUNqRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO21CQUNOLENBQUMsR0FBRyxDQUFDLENBQUM7Q0FDdEIsa0JBQWdCLE1BQU07Q0FDdEIsY0FBWSxLQUFLLENBQUM7Q0FDbEIsa0JBQWdCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO21CQUNwQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ3RCLGtCQUFnQixNQUFNO1lBQ2I7UUFDSjtPQUNELElBQUksQ0FBQyxLQUFLLENBQUM7Q0FDZixVQUFRLE1BQU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0NBQ3JDLE1BQUksT0FBTyxNQUFNLEdBQUcsS0FBSyxDQUFDO0NBQzFCLEdBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEVBQUEsTUFBTSxDQUFDLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDcEMsTUFBSSxPQUFPLGtFQUFrRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRixDQUFBOzs7Ozs7Ozs7OztDQ3pJRCxDQUFjLFlBQUEsR0FBRyxZQUFZLENBQUM7QUFDOUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsWUFBWSxHQUFHO0FBQ3hCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7R0FDeEI7QUFDRDtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtDQUN0RCxLQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztVQUN2RCxFQUFFLElBQUksRUFBRTtDQUNoQixTQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSTtDQUN6QixNQUFLLENBQUMsQ0FBQztNQUNILE9BQU8sSUFBSSxDQUFDO0NBQ2hCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0VBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRTtNQUMvQyxJQUFJLEdBQUcsS0FBSyxTQUFTO0NBQ3pCLFNBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7V0FDcEI7VUFDRCxJQUFJLEVBQUUsS0FBSyxTQUFTO2NBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO2VBQ3pCO2NBQ0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07a0JBQ2hDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO3NCQUN0QixTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztDQUMzQztzQkFDb0IsRUFBRSxDQUFDLENBQUM7V0FDZjtPQUNKO01BQ0QsT0FBTyxJQUFJLENBQUM7Q0FDaEIsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7RUFDQSxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7TUFDN0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUNyQyxJQUFJLFNBQVMsRUFBRTtVQUNYLElBQUksSUFBSSxHQUFHLEVBQUU7Y0FDVCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0NBQ2xCLFNBQVEsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07Y0FDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1VBQzlCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU07Q0FDeEMsYUFBWSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDdkQ7TUFDRCxPQUFPLElBQUksQ0FBQztHQUNmLENBQUE7Ozs7Ozs7Ozs7QUMxRUQ7Q0FDQSxDQUFBLEtBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEM7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtBQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDQTtDQUNBO0VBQ0EsU0FBUyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQzFCO0NBQ0E7Q0FDQSxLQUFJLElBQUksT0FBTyxZQUFZLEtBQUssV0FBVyxFQUFFLENBQUMsV0FBVztBQUN6RDtVQUNRLElBQUksR0FBRyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztjQUM5QixHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztjQUNoQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUNqQztVQUNRLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7Q0FDbkQsYUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2NBQ2IsR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN0QixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN6QjtBQUNUO1VBQ1EsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNuRCxhQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Y0FDYixHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCO0FBQ1Q7Q0FDQTtVQUNRLE9BQU8sQ0FBQyxZQUFZLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0NBQzVFO1VBQ1EsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUcsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDNUU7Q0FDQSxTQUFRLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLGFBQVksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDakI7QUFDVDtDQUNBLFNBQVEsU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO2NBQ2pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Q0FDbEMsYUFBWSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUNqQjtBQUNUO0NBQ0E7VUFDUSxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztDQUN6RTtVQUNRLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQ3pFO0NBQ0E7Q0FDQSxNQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVztBQUMzQjtVQUNRLFNBQVMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO2NBQ2xELElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2QyxhQUFZLElBQUksSUFBSTtDQUNwQixpQkFBZ0IsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO2NBQ2YsSUFBSSxHQUFHLEtBQUssQ0FBQztDQUN6QixpQkFBZ0IsU0FBUyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztDQUNsRyxrQkFBaUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO2tCQUNmLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO21CQUMvQixJQUFJLEdBQUcsR0FBRyxzQkFBc0I7Q0FDakQsaUJBQWdCLFNBQVMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsVUFBVSxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7bUJBQ3BELElBQUksR0FBRyxHQUFHLHNCQUFzQjtrQkFDakMsU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7bUJBQ2pGO0NBQ2pCLGlCQUFnQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztzQkFDL0MsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO2tCQUM1RSxTQUFTLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLFFBQVEsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLFFBQVEsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2VBQzdFO1dBQ0o7QUFDVDtDQUNBLFNBQVEsT0FBTyxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0NBQzFFLFNBQVEsT0FBTyxDQUFDLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFFO1VBQ1EsU0FBUyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtjQUMzQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztrQkFDekIsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztDQUMzQyxpQkFBZ0IsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLEdBQUcsR0FBRztDQUM1QyxpQkFBZ0IsUUFBUSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7Y0FDOUIsT0FBTyxRQUFRLEtBQUssR0FBRztDQUNuQyxtQkFBa0IsUUFBUTtDQUMxQixtQkFBa0IsR0FBRztvQkFDSCxJQUFJLEdBQUcsUUFBUTtvQkFDZixRQUFRLEtBQUssQ0FBQztDQUNoQyxtQkFBa0IsSUFBSSxHQUFHLHFCQUFxQixHQUFHLFFBQVE7Q0FDekQsbUJBQWtCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1dBQ25FO0FBQ1Q7Q0FDQSxTQUFRLE9BQU8sQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztDQUN2RSxTQUFRLE9BQU8sQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RTtDQUNBLE1BQUssR0FBRyxDQUFDO0FBQ1Q7Q0FDQTtDQUNBLEtBQUksSUFBSSxPQUFPLFlBQVksS0FBSyxXQUFXLEVBQUUsQ0FBQyxXQUFXO0FBQ3pEO1VBQ1EsSUFBSSxHQUFHLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQzVCLEdBQUcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO2NBQ2hDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBQ2pDO1VBQ1EsU0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtDQUNwRCxhQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7Y0FDYixHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3RCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1dBQ3pCO0FBQ1Q7VUFDUSxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQ3BELGFBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztjQUNiLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDekI7QUFDVDtDQUNBO1VBQ1EsT0FBTyxDQUFDLGFBQWEsR0FBRyxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7Q0FDL0U7VUFDUSxPQUFPLENBQUMsYUFBYSxHQUFHLEVBQUUsR0FBRyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUMvRTtDQUNBLFNBQVEsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO2NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Y0FDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FB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LEVBQUUsQ0FBQztDQUNsQyxXQUFTLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFO2VBQ2xCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDO2VBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLE1BQU0sTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxNQUFNLE1BQU0sRUFBRTtDQUN0RyxjQUFZLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztlQUNyRCxFQUFFLENBQUMsQ0FBQztlQUNKLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0NBQ25ELGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ25ELGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO2VBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDO0NBQ25ELFdBQVMsTUFBTTtlQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0NBQ25ELGNBQVksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDO2VBQ3ZDLE1B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TixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLE1BQU0sR0FBRztNQUMxQyxPQUFPLE1BQU0sQ0FBQyxZQUFZO0NBQzlCLFNBQVEsSUFBSSxDQUFDLEVBQUUsVUFBVSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Q0FDdEIsU0FBUSxJQUFJLENBQUMsRUFBRSxVQUFVLEdBQUc7Q0FDNUIsU0FBUSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxHQUFHO0NBQzVCLFNBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRztDQUM1QixTQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRTtDQUN0QixNQUFLLENBQUM7Q0FDTixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsR0FBRztNQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztNQUMzQixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0NBQzlELEtBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxNQUFNLENBQUMsQ0FBQztNQUMxRCxPQUFPLElBQUksQ0FBQztDQUNoQixFQUFDLENBQUM7QUFDRjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxRQUFRLENBQUMsU0FBUyxD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Q0FDQSxDQUFBLElBQUksWUFBWSxDQUFDO0FBQ2pCO0NBQ0EsQ0FBQSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUTtDQUM3QixLQUFJLE1BQU0sTUFBTSxJQUFJLENBQUMsTUFBTTtDQUMzQixLQUFJLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzFCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztHQUNsQjtBQUNEO0NBQ0E7RUFDQSxTQUFTLElBQUksR0FBRyxFQUFFO0FBQ2xCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtFQUNBLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUN2QjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDNUI7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBLEtBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxLQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUMxQjtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsS0FBSSxJ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R0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztDQUMvRyxTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztDQUMvRyxTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztDQUMvRyxTQUFRLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQztBQUMvRztDQUNBO1VBQ1EsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7Q0FDeEMsYUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7Q0FDaEMsYUFBWSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7V0FDbkM7VUFDRCxPQUFPLEtBQUssQ0FBQztDQUNyQixNQUFLLENBQUM7Q0FDTixFQUFDLEdBQUcsQ0FBQztBQUNMO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsVUFBVSxHQUFHO0NBQy9DLEtBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0NBQzdCLEVBQUMsQ0FBQztBQUNGO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsV0FBVyxHQUFHO0NBQ2pELEtBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0NBQzlCLEtBQUksT0FBTyxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQyxFQUFDLENBQUM7QUFDRjtDQUNBO0FBQ0E7Q0FDQSxDQUFBLFNBQVMsY0FBYyxHQUFHO0NBQzFCO01BQ0ksSUFBSSxJQUFJLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0NBQ2xDLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFO0NBQ2pDLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCO2NBQ1ksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDaEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQzFCLE9BQU8sSUFBSSxDQUFDO1dBQ25CO0NBQ1Q7VUFDUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1VBQzdELElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7VUFDN0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7Y0FDMUIsT0FBTyxJQUFJLENBQUM7VUFDaEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNkLE1BQUssTUFBTTtDQUNYLFNBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0NBQzNCO0NBQ0EsYUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUc7Q0FDcEMsaUJBQWdCLE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQzVDO2NBQ1ksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Y0FDaEUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUc7a0JBQzFCLE9BQU8sSUFBSSxDQUFDO1dBQ25CO0NBQ1Q7VUFDUSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxD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RUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO0NBQ2hvQyxJQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztHQUNsQixDQUFDLE9BQU8sQ0FBQyxFQUFFO0NBQ1o7R0FDQztBQUNEO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQSxDQUFBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ25DO0NBQ0E7Q0FDQTtD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QUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztNQUMvQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUM1QixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNsQztDQUNBLEtBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0NBQzNDLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7Q0FDckIsS0FBSSxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztNQUNsQixHQUFHLElBQUksTUFBTSxDQUFDO0NBQ2xCLEtBQUksR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7TUFDakIsR0FBRyxJQUFJLE1BQU0sQ0FBQztNQUNkLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Q0FDekUsRUFBQyxDQUFDO0FBQ0Y7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0EsQ0FBQSxhQUFhLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxDQUFDLFVBQVUsRUFBRTtDQUN2RCxLQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0NBQzNCLFNBQVEsVUFBVSxHQUFH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QUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO01BQ25DLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2hDLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3RDO0NBQ0EsS0FBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7Q0FDM0MsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztDQUNyQixLQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDO01BQ2xCLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDbEIsS0FBSSxHQUFH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Q0FBQyxFQUFFLENBQUMsQ0FBQTtDQUNyQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0NBQzlCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7Q0FDbkMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDNUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTthQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ3BFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7YUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNwRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2FBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDbkUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsbUJBQW1CLEtBQUssU0FBUyxFQUFFO0NBQzdDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxF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LE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0NBQzNDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7YUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNsRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO2FBQ25DLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDckUsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTthQUMvQixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0NBQ2pFLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7YUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNsRSxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO0NBQzFCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0NBQzFDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLEVBQUU7Q0FDM0IsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Q0FDM0MsU0FBQTtDQUNELFFBQUEsT0FBTyxNQUFNLENBQUE7TUFDZDtLQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWUsRUFBQTtTQUNwRCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVlBLGNBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUlBLGNBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDMUUsUUFBQSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUE7Q0FDakUsUUFBQSxNQUFNLE9BQU8sR0FBRyw2QkFBNkIsRUFBRSxDQUFBO0NBQy9DLFFBQUEsT0FBTyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRTtDQUN2QixZQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTthQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQ2YsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFTLENBQUE7cUJBQ3RDLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtxQkFDbEMsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7cUJBQ3hELE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO3FCQUMzRCxNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtxQkFDdkQsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7cUJBQ3hELE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtxQkFDakMsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFBO3FCQUNsQyxNQUFLO0NBQ1AsZ0JBQUE7Q0FDRSxvQkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtxQkFDeEIsTUFBSztDQUNSLGFBQUE7Q0FDRixTQUFBO0NBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQTtNQUNmO0VBQ0Y7O0NDdEdEOztDQUVHO0NBQ0ksTUFBTUMsY0FBWSxHQUFHLElBQUksQ0FBQTtDQUVoQzs7Q0FFRztDQUNJLE1BQU0sdUJBQXVCLEdBQWlDO0tBQ25FLFNBQVMsQ0FBQyxLQUEwQixFQUFFLE9BQW1CLEVBQUE7U0FDdkQsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQ2hELFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7Q0FDN0QsUUFBQSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtNQUNuQztDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7TUFDNUU7S0FDRCxNQUFNLEdBQUE7O1NBRUosT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFBO01BQ3BEO0VBQ0Y7O0NDekJEO0NBbUJBLFNBQVMsc0JBQXNCLEdBQUE7Q0FDN0IsSUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUE7Q0FDaEcsQ0FBQztDQUdEOztDQUVHO0NBQ0ksTUFBTSxZQUFZLEdBQUc7S0FDMUIsTUFBTSxDQUFDLE9BQXFCLEVBQUUsTUFBQSxHQUFxQkQsY0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQTtDQUNwRSxRQUFBLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7Q0FDeEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7Q0FDOUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO0NBQzFDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7Q0FDakQsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtDQUNqQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUN4QyxTQUFBO1NBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtDQUN4QixRQUFBLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtDQUMzQixZQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDaEIsU0FBQTtTQUNELE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtDQUNmLFFBQUEsT0FBTyxNQUFNLENBQUE7TUFDZDtLQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWUsRUFBQTtTQUNwRCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVlBLGNBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUlBLGNBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDMUUsUUFBQSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUE7Q0FDakUsUUFBQSxNQUFNLE9BQU8sR0FBRyxzQkFBc0IsRUFBRSxDQUFBO0NBQ3hDLFFBQUEsT0FBTyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRTtDQUN2QixZQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTthQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQ2YsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7cUJBQ3RDLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO3FCQUN4QyxNQUFLO0NBQ1AsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7cUJBQy9CLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7eUJBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO0NBQ3pDLHdCQUFBLE9BQU8sTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUU7NkJBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0NBQ2pDLHlCQUFBO0NBQ0YscUJBQUE7Q0FBTSx5QkFBQTt5QkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtDQUNqQyxxQkFBQTtxQkFDRCxNQUFLO0NBQ1AsZ0JBQUE7Q0FDRSxvQkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtxQkFDeEIsTUFBSztDQUNSLGFBQUE7Q0FDRixTQUFBO0NBQ0QsUUFBQSxPQUFPLE9BQU8sQ0FBQTtNQUNmO0VBQ0Y7O0NDM0VEOztDQUVHO0NBQ0ksTUFBTUMsY0FBWSxHQUFHLElBQUksQ0FBQTtDQUVoQzs7Q0FFRztDQUNJLE1BQU0sZ0JBQWdCLEdBQTBCO0tBQ3JELFNBQVMsQ0FBQyxLQUFtQixFQUFFLE9BQW1CLEVBQUE7U0FDaEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN6QyxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0NBQzdELFFBQUEsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7TUFDbkM7Q0FDRCxJQUFBLFdBQVcsQ0FBQyxNQUFrQixFQUFBO0NBQzVCLFFBQUEsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtNQUNyRTtLQUNELE1BQU0sR0FBQTs7U0FFSixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFBO01BQzdDO0VBQ0Y7O0NDekJEO0NBYUEsU0FBUyx1QkFBdUIsR0FBQTtDQUM5QixJQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUE7Q0FDbkMsQ0FBQztDQUdEOztDQUVHO0NBQ0ksTUFBTSxhQUFhLEdBQUc7S0FDM0IsTUFBTSxDQUFDLE9BQXNCLEVBQUUsTUFBQSxHQUFxQkQsY0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQTtDQUNyRSxRQUFBLElBQUksT0FBTyxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7Q0FDL0MsU0FBQTtDQUNELFFBQUEsT0FBTyxNQUFNLENBQUE7TUFDZDtLQUVELE1BQU0sQ0FBQyxLQUE4QixFQUFFLE1BQWUsRUFBQTtTQUNwRCxNQUFNLE1BQU0sR0FBRyxLQUFLLFlBQVlBLGNBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUlBLGNBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDMUUsUUFBQSxJQUFJLEdBQUcsR0FBRyxNQUFNLEtBQUssU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUE7Q0FDakUsUUFBQSxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsRUFBRSxDQUFBO0NBQ3pDLFFBQUEsT0FBTyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRTtDQUN2QixZQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTthQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDO0NBQ2YsZ0JBQUEsS0FBSyxDQUFDO0NBQ0osb0JBQUEsT0FBTyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7cUJBQ3ZDLE1BQUs7Q0FDUCxnQkFBQTtDQUNFLG9CQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFBO3FCQUN4QixNQUFLO0NBQ1IsYUFBQTtDQUNGLFNBQUE7Q0FDRCxRQUFBLE9BQU8sT0FBTyxDQUFBO01BQ2Y7RUFDRjs7Q0MxQ0Q7O0NBRUc7Q0FDSSxNQUFNQyxjQUFZLEdBQUcsSUFBSSxDQUFBO0NBRWhDOztDQUVHO0NBQ0ksTUFBTSxpQkFBaUIsR0FBMkI7S0FDdkQsU0FBUyxDQUFDLEtBQW9CLEVBQUUsT0FBbUIsRUFBQTtTQUNqRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQzFDLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7Q0FDN0QsUUFBQSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtNQUNuQztDQUNELElBQUEsV0FBVyxDQUFDLE1BQWtCLEVBQUE7Q0FDNUIsUUFBQSxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO01BQ3RFO0tBQ0QsTUFBTSxHQUFBOztTQUVKLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUE7TUFDOUM7RUFDRjs7Q0N6QkQ7Q0FrQkEsU0FBUyx1QkFBdUIsR0FBQTtDQUM5QixJQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUE7Q0FDdkYsQ0FBQztDQUdEOztDQUVHO0NBQ0ksTUFBTSxhQUFhLEdBQUc7S0FDM0IsTUFBTSxDQUFDLE9BQXNCLEVBQUUsTUFBQSxHQUFxQkQsY0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQTtDQUNyRSxRQUFBLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7Q0FDeEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7Q0FDOUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxFQUFFO0NBQzFDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7Q0FDakQsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtDQUNqQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUN4QyxTQUFBO0NBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0tBRUQsTUFBTSxDQUFDLEtBQThCLEVBQUUsTUFBZSxFQUFBO1NBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWUEsY0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSUEsY0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMxRSxRQUFBLElBQUksR0FBRyxHQUFHLE1BQU0sS0FBSyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQTtDQUNqRSxRQUFBLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixFQUFFLENBQUE7Q0FDekMsUUFBQSxPQUFPLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFBO2FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUM7Q0FDZixnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtxQkFDdEMsTUFBSztDQUNQLGdCQUFBLEtBQUssQ0FBQztDQUNKLG9CQUFBLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7cUJBQ3hDLE1BQUs7Q0FDUCxnQkFBQSxLQUFLLENBQUM7Q0FDSixvQkFBQSxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtxQkFDL0IsTUFBSztDQUNQLGdCQUFBO0NBQ0Usb0JBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUE7cUJBQ3hCLE1BQUs7Q0FDUixhQUFBO0NBQ0YsU0FBQTtDQUNELFFBQUEsT0FBTyxPQUFPLENBQUE7TUFDZjtFQUNGOztDQzNERDs7Q0FFRztDQUNJLE1BQU1DLGNBQVksR0FBRyxJQUFJLENBQUE7Q0FFaEM7O0NBRUc7Q0FDSSxNQUFNLGlCQUFpQixHQUEyQjtLQUN2RCxTQUFTLENBQUMsS0FBb0IsRUFBRSxPQUFtQixFQUFBO1NBQ2pELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDMUMsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtDQUM3RCxRQUFBLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO01BQ25DO0NBQ0QsSUFBQSxXQUFXLENBQUMsTUFBa0IsRUFBQTtDQUM1QixRQUFBLE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7TUFDdEU7S0FDRCxNQUFNLEdBQUE7O1NBRUosT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQTtNQUM5QztFQUNGOztDQ3pCRDtDQStDQSxTQUFTLHFCQUFxQixHQUFBO0tBQzVCLE9BQU87Q0FDTCxRQUFBLElBQUksRUFBRSxFQUFFO0NBQ1IsUUFBQSxPQUFPLEVBQUUsU0FBUztDQUNsQixRQUFBLElBQUksRUFBRSxTQUFTO0NBQ2YsUUFBQSxPQUFPLEVBQUUsU0FBUztDQUNsQixRQUFBLFFBQVEsRUFBRSxTQUFTO0NBQ25CLFFBQUEsWUFBWSxFQUFFLFNBQVM7Q0FDdkIsUUFBQSxVQUFVLEVBQUUsU0FBUztDQUNyQixRQUFBLFVBQVUsRUFBRSxTQUFTO0NBQ3JCLFFBQUEsS0FBSyxFQUFFLFNBQVM7Q0FDaEIsUUFBQSxNQUFNLEVBQUUsU0FBUztDQUNqQixRQUFBLFVBQVUsRUFBRSxTQUFTO0NBQ3JCLFFBQUEsWUFBWSxFQUFFLFNBQVM7Q0FDdkIsUUFBQSxhQUFhLEVBQUUsU0FBUztDQUN4QixRQUFBLFdBQVcsRUFBRSxTQUFTO0NBQ3RCLFFBQUEsV0FBVyxFQUFFLFNBQVM7Q0FDdEIsUUFBQSxTQUFTLEVBQUUsU0FBUztDQUNwQixRQUFBLFlBQVksRUFBRSxTQUFTO0NBQ3ZCLFFBQUEsVUFBVSxFQUFFLFNBQVM7Q0FDckIsUUFBQSxhQUFhLEVBQUUsU0FBUztDQUN4QixRQUFBLGFBQWEsRUFBRSxTQUFTO0NBQ3hCLFFBQUEsWUFBWSxFQUFFLFNBQVM7Q0FDdkIsUUFBQSxXQUFXLEVBQUUsU0FBUztDQUN0QixRQUFBLFlBQVksRUFBRSxTQUFTO0NBQ3ZCLFFBQUEsU0FBUyxFQUFFLFNBQVM7TUFDckIsQ0FBQTtDQUNILENBQUM7Q0FHRDs7Q0FFRztDQUNJLE1BQU0sV0FBVyxHQUFHO0tBQ3pCLE1BQU0sQ0FBQyxPQUFvQixFQUFFLE1BQUEsR0FBcUJELGNBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUE7Q0FDbkUsUUFBQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO0NBQ3ZCLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0NBQ3ZDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7Q0FDakMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7Q0FDeEMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtDQUM5QixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO0NBQ2pDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0NBQ3pDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7Q0FDbEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7Q0FDMUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtDQUN0QyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUM3QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO0NBQ3BDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0NBQzdDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDN0MsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtDQUMvQixZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUN2QyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0NBQ2hDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3hDLFNBQUE7Q0FDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7Q0FDcEMsWUFBQSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7Q0FDNUMsU0FBQTtDQUNELFFBQUEsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtDQUN0QyxZQUFBLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUMvQyxTQUFBO0NBQ0QsUUFBQSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO0NBQ3ZDLFlBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMs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LFNBQVMsQ0FBQyxLQUFvQixFQUFFLE9BQW1CLEVBQUE7U0FDakQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUE7U0FDMUQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUN6QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzdDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDN0MsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUM5QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzlDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDOUMsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUM5QyxRQUFBLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQzNDLFFBQUEsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDM0MsUUFBQSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVB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VUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2pDO1NBQ0QsV0FBVyxHQUFBO2FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2pDO1NBQ0QsUUFBUSxHQUFBO2FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQzlCO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQy9CO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQy9CO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2xDO1NBQ0QsU0FBUyxHQUFBO2FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQy9CO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2hDO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ2hDO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1VBQ25DO1NBQ0QsVUFBVSxHQUFBO2FBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUN2QyxZQUFBLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7VUFDaEQ7Q0FDRDs7Q0FFRztDQUNIOzs7O0NBSUc7Q0FDSCxRQUFBLG9CQUFvQixDQUFDLE1BQWMsRUFBQTtDQUNqQyxZQUFBLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQ3JCO0NBQ0Q7O0NBRUc7U0FDSCxJQUFJLEdBQUE7Q0FDRixZQUFBLE9BQU8sT0FBTyxDQUFBO1VBQ2Y7Q0FDRDs7Ozs7O0NBTUc7U0FDSCxRQUFRLEdBQUE7YUFDTixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1VBQ25DO0NBRUQ7Ozs7Q0FJRztTQUNILGNBQWMsR0FBQTthQUNaLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7VUFDdkM7Q0FFRCxRQUFBLFdBQVcsQ0FBQyxLQUFpQixFQUFFLFdBQUEsR0FBdUIsSUFBSSxFQUFBO0NBQ3hELFlBQUEsSUFBSSxXQUFXLEVBQUU7Q0FDZixnQkFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtDQUNuQyxhQUFBO2FBRUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtDQUNqQyxZQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1VBQ3JCO0NBQ0QsUUFBQSxZQUFZLENBQUMsS0FBYSxFQUFBO0NBQ3hCLFlBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2xCLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDMUI7Q0FDRCxRQUFBLFlBQVksQ0FBQyxLQUFhLEVBQUE7Q0FDeEIsWUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDbEIsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUMxQjtDQUNELFFBQUEsU0FBUyxDQUFDLEtBQWEsRUFBQTtDQUNyQixZQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUNsQixZQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQ3ZCO0NBQ0QsUUFBQSxVQUFVLENBQUMsS0FBYSxFQUFBO0NBQ3RCLFlBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2xCLFlBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDeEI7Q0FDRCxRQUFBLFVBQVUsQ0FBQyxLQUFhLEVBQUE7Q0FDdEIsWUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDbEIsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUN4QjtDQUNELFFBQUEsVUFBVSxDQUFDLEtBQWEsRUFBQTtDQUN0QixZQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUNsQixZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQzNCO0NBQ0QsUUFBQSxVQUFVLENBQUMsS0FBYSxFQUFBO0NBQ3RCLFlBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2xCLFlBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDeEI7Q0FDRCxRQUFBLFdBQVcsQ0FBQyxLQUFhLEVBQUE7Q0FDdkIsWUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDbEIsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUN6QjtDQUNELFFBQUEsV0FBVyxDQUFDLEtBQWEsRUFBQTtDQUN2QixZQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtDQUNsQixZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQ3pCO0NBQ0QsUUFBQSxXQUFXLENBQUMsS0FBYSxFQUFBO0NBQ3ZCLFlBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0NBQ2xCLFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDNUI7O0NBRUQsUUFBQSxVQUFVLENBQUMsTUFBYyxFQUFBO0NBQ3ZCLFlBQUEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQy9CO0NBQ0QsUUFBQSxVQUFVLENBQUMsTUFBYyxFQUFBO0NBQ3ZCLFlBQUEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQy9CO0NBQ0QsUUFBQSxPQUFPLENBQUMsTUFBYyxFQUFBO0NBQ3BCLFlBQUEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQzVCO0NBQ0QsUUFBQSxRQUFRLENBQUMsTUFBYyxFQUFBO0NBQ3JCLFlBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQzdCO0NBQ0QsUUFBQSxRQUFRLENBQUMsTUFBYyxFQUFBO0NBQ3JCLFlBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQzdCO0NBQ0QsUUFBQSxRQUFRLENBQUMsTUFBYyxFQUFBO0NBQ3JCLFlBQUEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQ2hDO0NBQ0QsUUFBQSxRQUFRLENBQUMsTUFBYyxFQUFBO0NBQ3JCLFlBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQzdCO0NBQ0QsUUFBQSxTQUFTLENBQUMsTUFBYyxFQUFBO0NBQ3RCLFlBQUEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQzlCO0NBQ0QsUUFBQSxTQUFTLENBQUMsTUFBYyxFQUFBO0NBQ3RCLFlBQUEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQzlCO0NBQ0QsUUFBQSxTQUFTLENBQUMsTUFBYyxFQUFBO0NBQ3RCLFlBQUEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBQ2pDO1NBQ0QsVUFBVSxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUE7Q0FDdEMsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUMvQjtTQUNELFVBQVUsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFBO0NBQ3RDLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDL0I7U0FDRCxPQUFPLENBQUMsTUFBYyxFQUFFLEtBQWEsRUFBQTtDQUNuQyxZQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQzVCO1NBQ0QsUUFBUSxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUE7Q0FDcEMsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUM3QjtTQUNELFFBQVEsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFBO0NBQ3BDLFlBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDN0I7U0FDRCxRQUFRLENBQUMsTUFBYyxFQUFFLEtBQWEsRUFBQTtDQUNwQyxZQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQ2hDO1NBQ0QsUUFBUSxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUE7Q0FDcEMsWUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUM3QjtTQUNELFNBQVMsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFBO0NBQ3JDLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7VUFDOUI7U0FDRCxTQUFTLENBQUMsTUFBYyxFQUFFLEtBQWEsRUFBQTtDQUNyQyxZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO1VBQzlCO1NBQ0QsU0FBUyxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUE7Q0FDckMsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtVQUNqQztNQUNGLENBQUE7Q0FDSDs7Q0M1VUE7Ozs7Ozs7Ozs7OztDQVlHO0NBTUcsSUFBVyxXQUFXLENBaUQzQjtDQWpERCxDQUFBLFVBQWlCLFdBQVcsRUFBQTtDQUMxQixJQUFBLENBQUEsVUFBWSxJQUFJLEVBQUE7Q0FDZCxRQUFBLElBQUEsQ0FBQSxJQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsVUFBWSxDQUFBOztDQUdaLFFBQUEsSUFBQSxDQUFBLElBQUEsQ0FBQSxlQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxlQUFpQixDQUFBO0NBQ2pCLFFBQUEsSUFBQSxDQUFBLElBQUEsQ0FBQSxrQkFBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsa0JBQW9CLENBQUE7Q0FFcEIsUUFBQSxJQUFBLENBQUEsSUFBQSxDQUFBLGtCQUFBLENBQUEsR0FBQSxDQUFBLENBQUEsR0FBQSxrQkFBZ0IsQ0FBQTtDQUNsQixLQUFDLEVBUlcsV0FBSSxDQUFBLElBQUEsS0FBSixnQkFBSSxHQVFmLEVBQUEsQ0FBQSxDQUFBLENBQUE7S0FXWSxXQUFhLENBQUEsYUFBQSxHQUFHLENBQUMsQ0FBQTtDQUM5Qjs7O0NBR0c7S0FDSCxTQUFnQixRQUFRLENBQUMsR0FBZSxFQUFBO0NBQ3RDLFFBQUEsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFBO0NBQ2hDLFFBQUEsSUFBSSxHQUFHLEdBQUcsV0FBQSxDQUFBLGFBQWEsRUFBRTtDQUN2QixZQUFBLE9BQU8sS0FBSyxDQUFBO0NBQ2IsU0FBQTtTQUVELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQTtTQUM1RCxJQUFJLEdBQUcsR0FBRyxhQUFhLEVBQUU7Q0FDdkIsWUFBQSxPQUFPLEtBQUssQ0FBQTtDQUNiLFNBQUE7Q0FFRCxRQUFBLE9BQU8sSUFBSSxDQUFBO01BQ1o7Q0FaZSxJQUFBLFdBQUEsQ0FBQSxRQUFRLFdBWXZCLENBQUE7S0FFRCxTQUFnQixVQUFVLENBQUMsR0FBZSxFQUFBO0NBQ3hDLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtDQUNsQixZQUFBLE9BQU8sSUFBSSxDQUFBO0NBQ1osU0FBQTtTQUVELE9BQU87Q0FDTCxZQUFBLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFO0NBQ3hCLFlBQUEsSUFBSSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQVU7VUFDL0IsQ0FBQTtNQUNGO0NBVGUsSUFBQSxXQUFBLENBQUEsVUFBVSxhQVN6QixDQUFBO0NBQ0gsQ0FBQyxFQWpEZ0IsV0FBVyxLQUFYLFdBQVcsR0FpRDNCLEVBQUEsQ0FBQSxDQUFBLENBQUE7QUFFRCxxQkFBZSxXQUFXOztDQ2hFcEIsSUFBVyxrQkFBa0IsQ0FrRmxDO0NBbEZELENBQUEsVUFBaUIsa0JBQWtCLEVBQUE7S0FvQnBCLGtCQUFxQixDQUFBLHFCQUFBLEdBQUcsRUFBRSxDQUFBO0NBQ3ZDOzs7Q0FHRztLQUNILFNBQWdCLEtBQUssQ0FDbkIsSUFBc0IsRUFDdEIsTUFBYyxFQUNkLFNBQWlCLEVBQ2pCLG1CQUF3QyxFQUN4QyxHQUFlLEVBQUE7O0NBR2YsUUFBQSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FDakRrRSxhQUFXLENBQUMsYUFBYSxHQUFHLGtCQUFBLENBQUEscUJBQXFCLENBQ2xELENBQUE7O0NBR0QsUUFBQSxJQUFJLElBQUksS0FBS0EsYUFBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7Q0FDM0MsWUFBQSxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7Q0FDbkQsU0FBQTtTQUNELE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQTs7Q0FHckQsUUFBQSxHQUFHLENBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFBO1NBQ2hELEdBQUcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBOztTQUczQyxHQUFHLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQTtTQUM3QyxHQUFHLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtDQUMvRCxRQUFBLEdBQUcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0NBQ3pELFFBQUEsR0FBRyxDQUFDLFNBQVMsQ0FDWCxrQkFBa0IsR0FBRyxFQUFFLEVBQ3ZCLGFBQWEsR0FBRyxrQkFBQSxDQUFBLHFCQUFxQixHQUFHQSxhQUFXLENBQUMsYUFBYSxDQUNsRSxDQUFBO01BQ0Y7Q0E5QmUsSUFBQSxrQkFBQSxDQUFBLEtBQUssUUE4QnBCLENBQUE7S0FFRCxTQUFnQixJQUFJLENBQ2xCLEdBQWUsRUFBQTtTQUVmLE1BQU0sTUFBTSxHQUFHQSxhQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBRTFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDWCxZQUFBLE9BQU8sSUFBSSxDQUFBO0NBQ1osU0FBQTtDQUVELFFBQUEsTUFBTSxNQUFNLEdBQUc7Q0FDYixZQUFBLEdBQUcsTUFBTTtDQUNULFlBQUEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEVBQVk7Q0FDbEMsWUFBQSxXQUFXLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRTtDQUM1QixZQUFBLFNBQVMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1VBQ3BDLENBQUE7U0FFRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUtBLGFBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7Q0FDckQsWUFBQSxPQUFPLE1BQU0sQ0FBQTtDQUNkLFNBQUE7U0FFRCxPQUFPO0NBQ0wsWUFBQSxHQUFHLE1BQU07Q0FDVCxZQUFBLElBQUksRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFO1VBQ3ZCLENBQUE7TUFDRjtDQXhCZSxJQUFBLGtCQUFBLENBQUEsSUFBSSxPQXdCbkIsQ0FBQTtDQUNILENBQUMsRUFsRmdCLGtCQUFrQixLQUFsQixrQkFBa0IsR0FrRmxDLEVBQUEsQ0FBQSxDQUFBOztVQzdFZSxlQUFlLENBQUMsRUFDOUIsTUFBTSxFQUNOLFVBQVUsRUFJWCxFQUFBOztDQUVDLElBQUEsTUFBTSxVQUFVLEdBQUdDLHdCQUFZLEVBQWMsQ0FBQTs7S0FFN0MsTUFBTSxnQkFBZ0IsR0FBcUIsRUFBRSxDQUFBOztLQUU3QyxNQUFNLGlCQUFpQixHQUF1QixFQUFFLENBQUE7O0tBR2hELFVBQVUsQ0FBQyxPQUFPLENBQ2hCLENBQUMsU0FBUyxNQUFNLFNBQVMsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pFLENBQUE7Q0FFRDs7OztDQUlHO0tBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxhQUFxQixFQUFBO0NBQzlDOzs7O0NBSUc7U0FDSCxPQUFPLFNBQVMsaUJBQWlCLENBQUMsWUFBd0IsRUFBQTthQUN4RCxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztpQkFDOUIsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFO0NBQ3BELGFBQUEsQ0FBQyxDQUFBO0NBRUYsWUFBQSxPQUFPRCxhQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0NBQ25DLGdCQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO2lCQUN6QyxNQUFNLE9BQU8sR0FBR0Usa0JBQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFFLENBQUE7Q0FFckMsZ0JBQUEsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUE7aUJBQzlELGdCQUFnQixDQUFDLElBQUksQ0FBQztxQkFDcEIsSUFBSTtxQkFDSixNQUFNO3FCQUNOLFdBQVc7cUJBQ1gsSUFBSTtxQkFDSixTQUFTO3FCQUNULGFBQWE7Q0FDYixvQkFBQSxhQUFhLEVBQUUsTUFBTTtDQUNsQix5QkFBQSxNQUFNLEVBQUU7Q0FDUix5QkFBQSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0NBQ2hELGlCQUFBLENBQUMsQ0FBQTtDQUNILGFBQUE7Q0FDSCxTQUFDLENBQUE7TUFDRjtDQUVEOzs7Q0FHRztLQUNILFNBQVMsV0FBVyxDQUFjLEtBQVUsRUFBQTtTQUMxQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Q0FDM0MsUUFBQSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtDQUNoQixRQUFBLE9BQU8saUJBQWlCLENBQUE7TUFDekI7Q0FFRDs7O0NBR0c7Q0FDSCxJQUFBLFNBQVMsZUFBZSxHQUFBO0NBQ3RCLFFBQUEsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtDQUN2RCxRQUFBLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO0NBQ2xDLFlBQUEsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQTtDQUNqQyxZQUFBLEtBQUssTUFBTSxPQUFPLElBQUksaUJBQWlCLEVBQUU7Q0FDdkMsZ0JBQUEsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUE7Q0FDOUQsZ0JBQUEsTUFBTSxXQUFXLEdBQTRCO0NBQzNDLG9CQUFBLElBQUksRUFBRSxNQUFNO0NBQ1osb0JBQUEsSUFBSSxFQUFFLFdBQVc7cUJBQ2pCLElBQUksRUFBRSxJQUFJLElBQUksSUFBSTtDQUNsQixvQkFBQSxTQUFTLEVBQUUsU0FBUztrQkFDckIsQ0FBQTtpQkFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2lCQUNsRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBOztpQkFHdEQsSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO0NBQzNCLG9CQUFBLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQ2hDLDBCQUFFRixhQUFXLENBQUMsSUFBSSxDQUFDLGFBQWE7Q0FDaEMsMEJBQUVBLGFBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUE7Q0FDckMsb0JBQUFFLGtCQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7Q0FDbEUsaUJBQUE7Q0FBTSxxQkFBQTs7Q0FFTCxvQkFBQSxJQUFJLElBQUksS0FBS0YsYUFBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtDQUM5Qyx3QkFBQSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQzdCLHFCQUFBO0NBQU0seUJBQUE7Q0FDTCx3QkFBQSxNQUFNLElBQUksR0FBRzs2QkFDWCxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFOzBCQUNyRCxDQUFBO0NBQ0Qsd0JBQUEsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7O3lCQUdqQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQTt5QkFDOUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFBO0NBQ3ZCLHFCQUFBOztDQUVELG9CQUFBLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtDQUNoQyxpQkFBQTtDQUNGLGFBQUE7Q0FFRCxZQUFBLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO2lCQUNqQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0NBQ2xDLGFBQUE7Q0FDRixTQUFBO01BQ0Y7Q0FFRDs7O0NBR0c7S0FDSCxTQUFTLGNBQWMsQ0FBQyxRQUFrQyxFQUFBOztDQUV4RCxRQUFBLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0NBQ25ELFFBQUEsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQTtTQUVqQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksUUFBUSxFQUFFO0NBQzdDLFlBQUEsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUU7aUJBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUE7Q0FDbEQsZ0JBQUEsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7dUJBQ3pDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFO3VCQUNyQyxJQUFJLENBQUE7Q0FDUixnQkFBQSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUNsQyxNQUFNLEVBQ04sV0FBVyxFQUNYLGVBQWUsQ0FDaEIsQ0FBQTtDQUNELGdCQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO0NBQzFDLGdCQUFBLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0NBQ2hDLHNCQUFFQSxhQUFXLENBQUMsSUFBSSxDQUFDLGFBQWE7Q0FDaEMsc0JBQUVBLGFBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUE7Q0FDckMsZ0JBQUEsTUFBTSxnQkFBZ0IsR0FBNEM7cUJBQ2hFLElBQUk7cUJBQ0osV0FBVztxQkFDWCxNQUFNO3FCQUNOLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztrQkFDM0IsQ0FBQTtDQUNELGdCQUFBLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRTtDQUN0RCxvQkFBQUUsa0JBQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtxQkFDL0QsWUFBWSxDQUFDLElBQUksQ0FBQztDQUNoQix3QkFBQSxHQUFHLGdCQUFnQjtDQUNuQix3QkFBQSxhQUFhLEVBQUUsTUFBTTtDQUNsQiw2QkFBQSxNQUFNLEVBQUU7Q0FDUiw2QkFBQSxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0NBQ2pELHFCQUFBLENBQUMsQ0FBQTtDQUNILGlCQUFBO0NBQ0YsYUFBQTtDQUNGLFNBQUE7O0NBR0QsUUFBQSxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0NBQzFDLFFBQUEsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7YUFDbEMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFBO0NBQzdCLFlBQUEsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLEVBQUU7Q0FDbEMsZ0JBQUEsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3FCQUM3QixlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUE7Q0FDMUQsaUJBQUE7Q0FDRixhQUFBO0NBQ0QsWUFBQSxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtpQkFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtDQUMzQyxhQUFBO0NBQ0YsU0FBQTtNQUNGO0tBRUQsT0FBTztTQUNMLGNBQWM7U0FDZCxlQUFlO01BQ2hCLENBQUE7Q0FDSDs7Q0N0SUE7O0NBRUc7Q0FDRyxTQUFVLFlBQVksQ0FDMUIsR0FBTSxFQUFBO0tBRU4sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBb0IsQ0FBQTtDQUNyRDs7VUN5SWdCLGVBQWUsQ0FJN0IsV0FBbUIsRUFDbkIsSUFBTyxFQUNQLGtCQUFvQztDQUNwQzs7Q0FFQSxJQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFBO0NBQ2hELElBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtDQUV2QyxJQUFBLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixFQUFFLENBQUE7Q0FDeEMsSUFBQSxJQUFJLGtCQUFrQixFQUFFO0NBQ3RCLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQTtDQUNsRCxLQUFBO0NBRUQsSUFBQSxTQUFTLGVBQWUsR0FBQTtDQUN0QixRQUFBLElBQUksa0JBQWtCLEVBQUU7Q0FDdEIsWUFBQSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLGdCQUFnQixDQUFDO0NBQ2YsZ0JBQUEsT0FBTyxFQUFFO0NBQ1Asb0JBQUEsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUU7Q0FDOUIsb0JBQUEsYUFBYSxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRTtDQUNsRCxpQkFBQTtDQUNGLGFBQUEsQ0FBQyxDQUNILENBQUE7Q0FDRixTQUFBO0NBQU0sYUFBQTtDQUNMLFlBQUEsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7Q0FDckIsU0FBQTtNQUNGO0tBRUQsU0FBUyxZQUFZLENBQUMsS0FBc0IsRUFBQTtTQUMxQyxPQUFPLEVBQUUsR0FBRyxlQUFlLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFBO01BQzFDO0tBRUQsT0FBTztDQUNMLFFBQUEsR0FBRyxFQUFFLFdBQVc7Q0FDaEIsUUFBQSxPQUFPLEVBQUUsWUFBQTthQUNQLE9BQU8sZUFBZSxFQUFFLENBQUE7VUFDekI7U0FDRCxPQUFPLEVBQUUsVUFBVSxNQUFjLEVBQUE7Q0FDL0IsWUFBQSxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDakM7U0FDRCxHQUFHLEVBQUUsVUFBVSxNQUFjLEVBQUE7Q0FDM0IsWUFBQSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7VUFDeEI7U0FDRCxVQUFVLEVBQUUsVUFBVSxNQUFjLEVBQUE7YUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUNsQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDbkIsWUFBQSxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQ3pCLE9BQU8sU0FBUyxJQUFJLElBQUksQ0FBQTtVQUN6QjtTQUNELFNBQVMsRUFBRSxVQUNULE1BQWMsRUFBQTthQUVkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDbEMsWUFBQSxPQUFPLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFBO1VBQ2xEO1NBQ0QsR0FBRyxFQUFFLFVBQVUsTUFBYyxFQUFBO2FBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDZCxNQUFNLElBQUksS0FBSyxDQUNiLENBQUEsb0JBQUEsRUFBdUIsV0FBVyxDQUFRLEtBQUEsRUFBQSxNQUFNLENBQVksVUFBQSxDQUFBLENBQzdELENBQUE7Q0FDRixhQUFBO0NBQ0QsWUFBQSxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtVQUMvQjtDQUNELFFBQUEsTUFBTSxFQUFFLFVBQ04sTUFBYyxFQUNkLEtBQXVCLEVBQUE7YUFFdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUNsQyxZQUFBLElBQUksU0FBUyxFQUFFO2lCQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IsQ0FBQSxtQkFBQSxFQUFzQixXQUFXLENBQVEsS0FBQSxFQUFBLE1BQU0sQ0FBaUIsZUFBQSxDQUFBLENBQ2pFLENBQUE7Q0FDRixhQUFBO0NBQ0QsWUFBQSxNQUFNLFNBQVMsR0FDYixLQUFLLEtBQUssU0FBUyxHQUFHLGVBQWUsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUMvRCxZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0NBQzNCLFlBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUN6QixZQUFBLE9BQU8sU0FBUyxDQUFBO1VBQ2pCO0NBQ0QsUUFBQSxlQUFlLEVBQUUsVUFDZixNQUFjLEVBQ2QsS0FBdUIsRUFBQTtDQUV2QixZQUFBLE1BQU0sU0FBUyxHQUNiLEtBQUssS0FBSyxTQUFTLEdBQUcsZUFBZSxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO0NBQy9ELFlBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBVSxDQUFDLENBQUE7Q0FDNUIsWUFBQSxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQ3pCLFlBQUEsT0FBTyxTQUFVLENBQUE7VUFDbEI7U0FDRCxnQkFBZ0IsRUFBRSxVQUFVLE1BQWMsRUFBQTthQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQ2xDLElBQUksQ0FBQyxTQUFTLEVBQUU7Q0FDZCxnQkFBQSxPQUFPLElBQUksQ0FBQTtDQUNaLGFBQUE7Q0FDRCxZQUFBLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDekIsWUFBQSxPQUFPLFNBQVMsQ0FBQTtVQUNqQjtTQUNELFVBQVUsRUFBRSxVQUFVLE1BQWMsRUFBQTthQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDL0MsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO2lCQUN0QixNQUFNLElBQUksS0FBSyxDQUNiLENBQUEsb0JBQUEsRUFBdUIsV0FBVyxDQUFRLEtBQUEsRUFBQSxNQUFNLENBQVksVUFBQSxDQUFBLENBQzdELENBQUE7Q0FDRixhQUFBO0NBQ0QsWUFBQSxPQUFPLFNBQVMsQ0FBQTtVQUNqQjtTQUNELFFBQVEsRUFBRSxhQUFTO2FBQ2pCLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUU7Q0FDdEMsZ0JBQUEsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQTtDQUMxQixhQUFBO1VBQ0Y7U0FDRCxhQUFhLEVBQUUsYUFBUztDQUN0QixZQUFBLEtBQUssTUFBTSxNQUFNLElBQUksYUFBYSxFQUFFO0NBQ2xDLGdCQUFBLE1BQU0sTUFBTSxDQUFBO0NBQ2IsYUFBQTtVQUNGO0NBQ0QsUUFBQSxRQUFRLENBQUMsTUFBYyxFQUFBO2FBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDZCxNQUFNLElBQUksS0FBSyxDQUNiLENBQUEscUJBQUEsRUFBd0IsV0FBVyxDQUFRLEtBQUEsRUFBQSxNQUFNLENBQVksVUFBQSxDQUFBLENBQzlELENBQUE7Q0FDRixhQUFBO0NBRUQsWUFBQSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0NBQ3RDLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUE7Q0FDdEMsWUFBQSxPQUFPLFdBQVcsQ0FBQTtVQUNuQjtTQUNELGlCQUFpQixDQUFDLE1BQWMsRUFBRSxNQUFrQixFQUFBO2FBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDZCxNQUFNLElBQUksS0FBSyxDQUNiLENBQUEsOEJBQUEsRUFBaUMsV0FBVyxDQUFRLEtBQUEsRUFBQSxNQUFNLENBQVksVUFBQSxDQUFBLENBQ3ZFLENBQUE7Q0FDRixhQUFBO0NBRUQsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQTtVQUNsQztTQUNELGdCQUFnQixDQUNkLE1BQWMsRUFDZCxNQUFrQixFQUFBO2FBRWxCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7YUFDbEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtpQkFDZCxNQUFNLElBQUksS0FBSyxDQUNiLENBQUEsNkJBQUEsRUFBZ0MsV0FBVyxDQUFRLEtBQUEsRUFBQSxNQUFNLENBQVksVUFBQSxDQUFBLENBQ3RFLENBQUE7Q0FDRixhQUFBO2FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1VBQzdDO1NBQ0QsZ0JBQWdCLENBQ2QsTUFBYyxFQUNkLE1BQWtCLEVBQUE7YUFFbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUN6QyxZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0NBQzFCLFlBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUN6QixZQUFBLE9BQU8sUUFBUSxDQUFBO1VBQ2hCO0NBQ0QsUUFBQSxVQUFVLEVBQUUsWUFBQTthQUNWLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtVQUN0QjtNQUNGLENBQUE7Q0FDSDs7Q0MxV00sSUFBVyxXQUFXLENBeUMzQjtDQXpDRCxDQUFBLFVBQWlCLFdBQVcsRUFBQTtLQU9iLFdBQVksQ0FBQSxZQUFBLEdBQUcsVUFBVSxDQUFBO0tBQ3pCLFdBQXlCLENBQUEseUJBQUEsR0FBRyxLQUFLLENBQUE7S0FDakMsV0FBd0IsQ0FBQSx3QkFBQSxHQUFHLEdBQUcsQ0FBQTtDQUU5QixJQUFBLFdBQUEsQ0FBQSx1QkFBdUIsR0FBZ0I7U0FDbEQsQ0FBQztTQUNELFdBQUEsQ0FBQSx3QkFBd0IsR0FBRyxDQUFDO01BQzdCLENBQUE7Q0FFWSxJQUFBLFdBQUEsQ0FBQSxxQkFBcUIsR0FBZ0I7Q0FDaEQsUUFBQSxXQUFBLENBQUEsd0JBQXdCO1NBQ3hCLFdBQUEsQ0FBQSx5QkFBeUIsR0FBRyxDQUFDO01BQzlCLENBQUE7Q0FFWSxJQUFBLFdBQUEsQ0FBQSxzQkFBc0IsR0FBZ0I7Q0FDakQsUUFBQSxXQUFBLENBQUEseUJBQXlCO0NBQ3pCLFFBQUEsV0FBQSxDQUFBLFlBQVk7TUFDYixDQUFBO0NBRUQsSUFBQSxTQUFTLFNBQVMsQ0FBQyxNQUFjLEVBQUUsS0FBa0IsRUFBQTtDQUNuRCxRQUFBLE9BQU8sTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO01BQ2hEO0tBRUQsU0FBZ0IsZUFBZSxDQUFDLE1BQWMsRUFBQTtDQUM1QyxRQUFBLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFBLENBQUEsc0JBQXNCLENBQUMsQ0FBQTtNQUNqRDtDQUZlLElBQUEsV0FBQSxDQUFBLGVBQWUsa0JBRTlCLENBQUE7S0FFRCxTQUFnQixjQUFjLENBQUMsTUFBYyxFQUFBO0NBQzNDLFFBQUEsT0FBTyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQUEsQ0FBQSxxQkFBcUIsQ0FBQyxDQUFBO01BQ2hEO0NBRmUsSUFBQSxXQUFBLENBQUEsY0FBYyxpQkFFN0IsQ0FBQTtLQUVELFNBQWdCLGdCQUFnQixDQUFDLE1BQWMsRUFBQTtDQUM3QyxRQUFBLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFBLENBQUEsdUJBQXVCLENBQUMsQ0FBQTtNQUNsRDtDQUZlLElBQUEsV0FBQSxDQUFBLGdCQUFnQixtQkFFL0IsQ0FBQTtDQUNILENBQUMsRUF6Q2dCLFdBQVcsS0FBWCxXQUFXLEdBeUMzQixFQUFBLENBQUEsQ0FBQTs7VUNuQ2UsZUFBZSxHQUFBO0tBQzdCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQTtLQUM5RCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUE7S0FDaEUsT0FBTztTQUNMLGNBQWMsQ0FBQyxVQUFtQixLQUFLLEVBQUE7Q0FDckMsWUFBQSxJQUFJLE9BQU8sRUFBRTtDQUNYLGdCQUFBLE9BQU8sYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFBO0NBQ3RDLGFBQUE7Q0FBTSxpQkFBQTtDQUNMLGdCQUFBLE9BQU8sWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFBO0NBQ3JDLGFBQUE7VUFDRjtDQUNELFFBQUEsWUFBWSxDQUFDLE1BQWMsRUFBQTtDQUN6QixZQUFBLFFBQ0UsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUN4RTtVQUNGO0NBQ0QsUUFBQSxjQUFjLENBQUMsTUFBYyxFQUFBO0NBQzNCLFlBQUEsUUFDRSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0NBQ3BDLGdCQUFBLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7aUJBQzlDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDaEQ7VUFDRjtTQUNELG1CQUFtQixHQUFBO2FBQ2pCLE9BQU8sSUFBSSxHQUFHLENBQUM7aUJBQ2IsR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQUU7aUJBQ3JDLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixFQUFFO0NBQ3ZDLGFBQUEsQ0FBQyxDQUFBO1VBQ0g7TUFDRixDQUFBO0NBQ0gsQ0FBQztDQUVELFNBQVMsTUFBTSxDQUFDLEtBQThCLEVBQUE7S0FDNUMsU0FBUyxZQUFZLENBQUMsTUFBYyxFQUFBO0NBQ2xDLFFBQUEsT0FBTyxNQUFnQixDQUFBO01BQ3hCO0NBRUQsSUFBQSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Q0FDNUIsSUFBQSxNQUFNLFlBQVksR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtDQUUzQyxJQUFBLFNBQVMsY0FBYyxHQUFBO0NBQ3JCLFFBQUEsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0NBQzdCLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FDYixDQUFBLG9EQUFBLEVBQXVELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFBLEVBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUEsQ0FBSSxDQUNqRixDQUFBO0NBQ0YsU0FBQTtDQUVELFFBQUEsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFBO0NBQzFDLFFBQUEsYUFBYSxFQUFFLENBQUE7Q0FFZixRQUFBLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0tBRUQsU0FBUyxZQUFZLENBQUMsTUFBYyxFQUFBO0NBQ2xDLFFBQUEsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO01BQ25DO0tBRUQsT0FBTztTQUNMLG1CQUFtQixHQUFBO0NBQ2pCLFlBQUEsT0FBTyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtVQUM3QjtTQUNELGNBQWM7U0FDZCxZQUFZO01BQ2IsQ0FBQTtDQUNIOztDQ3BFTyxNQUFNLHdCQUF3QixHQUFHLEtBQUssQ0FBQTtVQVE3QixlQUFlLEdBQUE7S0FDN0IsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQTtDQUVoQyxJQUFBLFNBQVMsSUFBSSxHQUFBO0NBQ1gsUUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtNQUNoRDtDQUVELElBQUEsU0FBUyxHQUFHLENBQUMsRUFBVSxFQUFFLFFBQWdCLEVBQUUsSUFBYSxFQUFBO0NBQ3RELFFBQUEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7Q0FDMUMsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7Q0FDeEMsU0FBQTtDQUFNLGFBQUEsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0NBQzdELFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0NBQzVDLFNBQUE7U0FFRCxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQ1gsRUFBRTthQUNGLFFBQVE7YUFDUixJQUFJO0NBQ0wsU0FBQSxDQUFDLENBQUE7Q0FDRixRQUFBLElBQUksRUFBRSxDQUFBO01BQ1A7S0FFRCxTQUFTLE1BQU0sQ0FBQyxRQUF5QixFQUFBO0NBQ3ZDLFFBQUEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUE7Q0FFZCxRQUFBLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO0NBQ2hDLFlBQUEsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQTtDQUM1RCxTQUFBO0NBQU0sYUFBQTtDQUNMLFlBQUEsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQTtDQUMxRCxTQUFBO0NBRUQsUUFBQSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtDQUNoQixZQUFBLE9BQU8sS0FBSyxDQUFBO0NBQ2IsU0FBQTtDQUVELFFBQUEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7Q0FDeEIsUUFBQSxJQUFJLEVBQUUsQ0FBQTtDQUNOLFFBQUEsT0FBTyxJQUFJLENBQUE7TUFDWjtLQUVELE9BQU87U0FDTCxHQUFHO1NBQ0gsTUFBTTtTQUNOLFVBQVUsR0FBQTtDQUNSLFlBQUEsT0FBTyxPQUFPLENBQUE7VUFDZjtNQUNGLENBQUE7Q0FDSDs7Q0N2Q0EsU0FBUyxTQUFTLEdBQUE7Q0FDaEIsSUFBQSxNQUFNLGVBQWUsR0FBRyxlQUFlLEVBQUUsQ0FBQTtDQUN6QyxJQUFBLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUE7OztDQUd4RSxJQUFBLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBRzlCLENBQUE7Q0FDSCxJQUFBLE1BQU0sT0FBTyxHQUFHLGVBQWUsRUFBRSxDQUFBO0NBRWpDLElBQUEsU0FBUyxTQUFTLENBQ2hCLEVBQVUsRUFDVixRQUFtQixHQUFBLHdCQUF3QixFQUMzQyxJQUFhLEVBQUE7U0FFYixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUE7TUFDaEM7S0FFRCxTQUFTLFlBQVksQ0FBQyxRQUF5QixFQUFBO0NBQzdDLFFBQUEsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO01BQ2hDO0tBRUQsU0FBUyxTQUFTLENBQUMsT0FBQSxHQUFtQixLQUFLLEVBQUE7O1NBRXpDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUE7Q0FDdEQsUUFBQSxPQUFPLE1BQU0sQ0FBQTtNQUNkO0NBRUQsSUFBQSxTQUFTLGdCQUFnQixHQUFBO0NBQ3ZCLFFBQUEsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7TUFDdkI7S0FFRCxTQUFTLFlBQVksQ0FBQyxNQUFjLEVBQUE7Q0FDbEMsUUFBQSxLQUFLLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxvQkFBb0IsRUFBRTtDQUNoRCxZQUFBLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtDQUN6QixnQkFBQSxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0NBQzdCLGFBQUE7Q0FDRixTQUFBO0NBRUQsUUFBQSxPQUFPLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7TUFDNUM7Q0FFRCxJQUFBLFNBQVMseUJBQXlCLENBSWhDLElBQU8sRUFDUCxXQUFtQixFQUNuQixrQkFBb0MsRUFBQTtDQUVwQyxRQUFBLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0NBQ3pDLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdBQVcsQ0FBQSxpQkFBQSxDQUFtQixDQUFDLENBQUE7Q0FDN0QsU0FBQTtTQUNELE1BQU0sWUFBWSxHQUFHQyxlQUFZLENBQy9CLFdBQVcsRUFDWCxJQUFJLEVBQ0osa0JBQWtCLENBQ25CLENBQUE7Q0FDRCxRQUFBLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUE7Q0FDbkQsUUFBQSxPQUFPLFlBQVksQ0FBQTtNQUNwQjtDQUVELElBQUEsU0FBU0MsaUJBQWUsQ0FJdEIsSUFBTyxFQUNQLFdBQW1CLEVBQ25CLGtCQUFvQyxFQUFBO0NBRXBDLFFBQUEsT0FBTyx5QkFBeUIsQ0FDOUJOLGVBQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQ2pCLFdBQVcsRUFDWCxrQkFBa0IsQ0FDbkIsQ0FBQTtNQUNGO0tBRUQsU0FBUyxZQUFZLENBQ25CLFdBQW1CLEVBQUE7U0FFbkIsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUU7Q0FDZCxZQUFBLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUdBQW1HLENBQ3BHLENBQUE7Q0FDRixTQUFBO0NBQ0QsUUFBQSxPQUFPLFNBQVMsQ0FBQTtNQUNqQjtDQUVELElBQUEsVUFBVSxlQUFlLENBRXZCLEdBQUcsVUFBYSxFQUFBO0NBQ2hCLFFBQUEsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksb0JBQW9CLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRTthQUN4RSxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBR3BELENBQUE7Q0FDRixTQUFBO01BQ0Y7Q0FFRCxJQUFBLFVBQVUsb0JBQW9CLENBQzVCLEdBQUcsSUFBTyxFQUFBO1NBRVYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxJQUFJLENBQUE7U0FDekQsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksaUJBQWlCLENBQUMsUUFBUSxFQUFFLEVBQUU7YUFDbkQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFBO0NBQ2xCLFlBQUEsS0FBSyxNQUFNLFlBQVksSUFBSSxvQkFBb0IsRUFBRTtDQUMvQyxnQkFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtxQkFDN0IsT0FBTyxHQUFHLEtBQUssQ0FBQTtxQkFDZixNQUFLO0NBQ04saUJBQUE7Q0FDRixhQUFBO0NBRUQsWUFBQSxJQUFJLE9BQU8sRUFBRTtDQUNYLGdCQUFBLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQTtDQUN4QixhQUFBO0NBQ0YsU0FBQTtNQUNGO0NBRUQsSUFBQSxTQUFTLFVBQVUsR0FBQTtDQUNqQixRQUFBLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFBO01BQzVCO0tBRUQsU0FBUyx5QkFBeUIsQ0FBQyxXQUFtQixFQUFBO0NBQ3BELFFBQUEsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO01BQ3pDO0tBRUQsT0FBTztTQUNMLGlCQUFpQjtTQUNqQixvQkFBb0I7U0FDcEIsU0FBUztTQUNULGdCQUFnQjtTQUNoQixZQUFZO1NBQ1osU0FBUztTQUNULFVBQVU7U0FDVixZQUFZOzBCQUNaTSxpQkFBZTtTQUNmLHlCQUF5QjtTQUN6QixlQUFlO1NBQ2YsWUFBWTtTQUNaLHlCQUF5QjtNQUMxQixDQUFBO0NBQ0gsQ0FBQztDQU9EOztDQUVHO1VBQ2EsTUFBTSxDQUFDLEVBQUUsVUFBVSxLQUFvQixFQUFFLEVBQUE7Q0FDdkQsSUFBQSxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQTtDQUMxQixJQUFBLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7Q0FDNUUsSUFBQSxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtLQUVsRCxTQUFTLE1BQU0sQ0FBQyxFQUFVLEVBQUE7U0FDeEIsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFBO0NBRTVCLFFBQUEsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUU7Q0FDeEMsWUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0NBQ2QsU0FBQTs7O0NBSUQsUUFBQSxNQUFNLHdCQUF3QixHQUFHO0NBQy9CLFlBQUEsY0FBYyxDQUFDLG1CQUFtQjtDQUNsQyxZQUFBLGNBQWMsQ0FBQyxpQkFBaUI7VUFDakMsQ0FBQTtDQUNELFFBQUEsTUFBTSxtQkFBbUIsR0FBRyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0NBQzVFLFFBQUEsS0FBSyxNQUFNLFlBQVksSUFBSSx3QkFBd0IsRUFBRTthQUNuRCxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFO0NBQzNELGdCQUFBLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7Q0FDaEMsYUFBQTtDQUNGLFNBQUE7Ozs7Q0FLRCxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFBO1NBQy9DLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEVBQUU7Q0FDbkUsWUFBQSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQUUsU0FBUTtDQUV2RCxZQUFBLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxFQUFFO0NBQy9DLGdCQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3FCQUN6QixRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUE7Q0FDaEMsaUJBQUE7aUJBQ0QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUE7Q0FDdkMsYUFBQTtDQUNGLFNBQUE7Q0FDRCxRQUFBLFVBQVUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUE7U0FFbkMsS0FBSyxNQUFNLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTthQUNwRSxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUE7Q0FDeEIsU0FBQTtNQUNGO0tBRUQsT0FBTztTQUNMLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztTQUMzQixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO1NBQ3pDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtTQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7U0FDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1NBQ2pDLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtTQUN2Qyx5QkFBeUIsRUFBRSxNQUFNLENBQUMseUJBQXlCO1NBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtTQUN2QyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7U0FDakMseUJBQXlCLEVBQUUsTUFBTSxDQUFDLHlCQUF5QjtTQUMzRCxNQUFNO1NBQ04sY0FBYztNQUNmLENBQUE7Q0FDSDs7Q0MxT0E7Q0FDQSxJQUFZLGVBMkJYLENBQUE7Q0EzQkQsQ0FBQSxVQUFZLGVBQWUsRUFBQTtDQUMxQixJQUFBLGVBQUEsQ0FBQSxlQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsQ0FBQSxDQUFBLEdBQUEsV0FBYSxDQUFBO0NBQ2IsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFVBQWUsQ0FBQTtDQUNmLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxhQUFrQixDQUFBO0NBQ2xCLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxjQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxjQUFtQixDQUFBO0NBQ25CLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxvQkFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLEdBQUEsb0JBQXlCLENBQUE7Q0FDekIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLGFBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLGFBQWtCLENBQUE7Q0FDbEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFdBQWdCLENBQUE7Q0FDaEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFVBQWUsQ0FBQTtDQUNmLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxZQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxZQUFpQixDQUFBO0NBQ2pCLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxnQkFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLEdBQUEsZ0JBQXFCLENBQUE7Q0FDckIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLGVBQW9CLENBQUE7Q0FDcEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFdBQWdCLENBQUE7Q0FDaEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFVBQWUsQ0FBQTtDQUNmLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxjQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxjQUFtQixDQUFBO0NBQ25CLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxjQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxjQUFtQixDQUFBO0NBQ25CLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxVQUFlLENBQUE7Q0FDZixJQUFBLGVBQUEsQ0FBQSxlQUFBLENBQUEsZUFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLEdBQUEsZUFBb0IsQ0FBQTtDQUNwQixJQUFBLGVBQUEsQ0FBQSxlQUFBLENBQUEscUJBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLHFCQUEwQixDQUFBO0NBQzFCLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxhQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsR0FBQSxhQUFrQixDQUFBO0NBQ2xCLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxtQkFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLEdBQUEsbUJBQXdCLENBQUE7Q0FDeEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFlBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFlBQWlCLENBQUE7Q0FDakIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLGFBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLGFBQWtCLENBQUE7Q0FDbEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLGFBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLGFBQWtCLENBQUE7Q0FDbEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFdBQWdCLENBQUE7Q0FDaEIsSUFBQSxlQUFBLENBQUEsZUFBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLElBQUEsQ0FBQSxHQUFBLFFBQWEsQ0FBQTtDQUNiLElBQUEsZUFBQSxDQUFBLGVBQUEsQ0FBQSxxQkFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLEdBQUEscUJBQTBCLENBQUE7Q0FDM0IsQ0FBQyxFQTNCVyxlQUFlLEtBQWYsZUFBZSxHQTJCMUIsRUFBQSxDQUFBLENBQUE7O0NDeEJELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO01BQ2hELE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUM7TUFDcEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1VBRUUsdUJBQXVCLEdBQUE7Q0FDckMsSUFBQSxJQUFJLE9BQU8sR0FBRyxLQUFLLFdBQVcsRUFBRTs7Q0FFOUIsUUFBQSxNQUFNLElBQUksS0FBSyxDQUNiLGlFQUFpRSxDQUNsRSxDQUFBO0NBQ0YsS0FBQTtLQUVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQTtLQUN2QixPQUFPO1NBQ0wsSUFBSTtDQUNKLFFBQUEsSUFBSSxDQUFDLE9BQW1CLEVBQUE7O2FBRXRCLEdBQUc7Q0FDQSxpQkFBQSxPQUFPLENBQUMseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUU7Q0FDcEQsZ0JBQUEsRUFBRSxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7Y0FDbEMsQ0FBQztDQUNELGlCQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7VUFDcEI7Q0FDRCxRQUFBLE1BQU0sQ0FBQyxPQUF5QixFQUFBOztDQUU5QixZQUFBLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7Q0FDbEMsZ0JBQUEsT0FBTyxLQUFLLENBQUE7Q0FDYixhQUFBOzthQUdELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtDQUMvQyxnQkFBQSxPQUFPLEtBQUssQ0FBQTtDQUNiLGFBQUE7YUFFRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUE7VUFDakI7TUFDRixDQUFBO0NBQ0g7O1VDdENnQixzQkFBc0IsR0FBQTs7S0FFcEMsU0FBUyxJQUFJLENBQUMsR0FBRyxLQUFZLEVBQUE7O01BRTVCO0tBRUQsTUFBTSxJQUFJLEdBQUcsbUJBQW1CLENBQUE7S0FDaEMsT0FBTztTQUNMLElBQUk7U0FDSixJQUFJO0NBQ0osUUFBQSxNQUFNLENBQUMsT0FBeUIsRUFBQTs7Q0FFOUIsWUFBQSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO0NBQ2xDLGdCQUFBLE9BQU8sS0FBSyxDQUFBO0NBQ2IsYUFBQTs7Q0FJRCxZQUFBLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQTtVQUNqQjtNQUNGLENBQUE7Q0FDSDs7Q0N4QkE7Q0FXQSxNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixFQUFFLENBQUE7QUFDNUMsT0FBTSxNQUFNLEdBQUcsTUFBTSxDQUFDO0NBQzNCLElBQUEsVUFBVSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztDQUMxRCxDQUFBLEVBQUM7Q0FFRixJQUFJLE9BQU8sR0FBRyxLQUFLLFdBQVcsRUFBRTtDQUM5QixJQUFBLEdBQUcsQ0FBQyxVQUFVLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtDQUU5RCxJQUFBLGVBQWUsb0JBQW9CLEdBQUE7Q0FDakMsUUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQ2hDLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsRUFBRSxDQUNILENBQUE7Q0FFRCxRQUFBLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7YUFDekIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7Q0FDL0IsZ0JBQUEsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFO0NBQ3JDLG9CQUFBLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtDQUN2QyxpQkFBQTtDQUNGLGFBQUE7Q0FDRixTQUFBO01BQ0Y7Q0FFRCxJQUFBLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFVLEtBQUk7Q0FDMUIsUUFBQSxvQkFBb0IsRUFBRTtDQUNuQixhQUFBLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO2NBQ2hCLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtDQUNyQyxLQUFDLENBQUMsQ0FBQTtDQUNILENBQUE7QUFFWSxPQUFBLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBRztBQUNiLE9BQUEsS0FBSyxHQUFHLEdBQUcsQ0FBQzs7Q0N6Q3pCOzs7Ozs7Ozs7Ozs7OztDQWNHO0NBQ0csU0FBVSxzQkFBc0IsQ0FBQyxNQUFlLEVBQUE7Q0FDcEQsSUFBQSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQTtDQUNqRCxJQUFBLE9BQU8sTUFBSztDQUNWLFFBQUEsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFLEVBQUU7YUFDOUMsSUFBSSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUMzQyxZQUFBLE9BQU8sU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Q0FDcEMsZ0JBQUEsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtDQUMvQixvQkFBQSxHQUFHLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxNQUFNLENBQUEsQ0FBRSxDQUFDLENBQUE7cUJBQzNELE1BQUs7Q0FDTixpQkFBQTtDQUFNLHFCQUFBO3FCQUNMLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtDQUNsRCxpQkFBQTtDQUNGLGFBQUE7Q0FDRixTQUFBO0NBQ0gsS0FBQyxDQUFBO0NBQ0g7O0NDOUJBO09BQ2EsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBUztDQUN4RDtPQUNhLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVE7Q0FDdEQ7T0FDYSxXQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFXO0NBQzVEO09BQ2EsWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBWTtDQUM5RDtPQUNhLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsbUJBQWtCO0NBQzFFO09BQ2EsV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBVztDQUM1RDtPQUNhLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVM7Q0FDeEQ7T0FDYSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFRO0NBQ3REO09BQ2EsVUFBVSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVTtDQUMxRDtPQUNhLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLGVBQWM7Q0FDbEU7T0FDYSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFhO0NBQ2hFO09BQ2EsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBUztDQUN4RDtPQUNhLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVE7Q0FDdEQ7T0FDYSxZQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFZO0NBQzlEO09BQ2EsWUFBWSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBWTtDQUM5RDtPQUNhLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVE7Q0FDdEQ7T0FDYSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFhO0NBQ2hFO09BQ2EsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxvQkFBbUI7Q0FDNUU7T0FDYSxXQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFXO0NBQzVEO09BQ2EsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxrQkFBaUI7Q0FDeEU7T0FDYSxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFVO0NBQzFEO09BQ2EsV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBVztDQUM1RDtPQUNhLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVc7Q0FDNUQ7T0FDYSxTQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFTO0NBQ3hEO09BQ2EsTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTTtDQUNsRDtPQUNhLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7O0NDcER6RDtBQUNpQkMsNkJBcURoQjtDQXJERCxDQUFBLFVBQWlCLFVBQVUsRUFBQTs7Q0FFYixJQUFBLFVBQUEsQ0FBQSxTQUFTLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUE7O0NBRTNDLElBQUEsVUFBQSxDQUFBLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQTs7Q0FFekMsSUFBQSxVQUFBLENBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFBOztDQUUvQyxJQUFBLFVBQUEsQ0FBQSxZQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUE7O0NBRWpELElBQUEsVUFBQSxDQUFBLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUE7O0NBRTdELElBQUEsVUFBQSxDQUFBLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQTs7Q0FFL0MsSUFBQSxVQUFBLENBQUEsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFBOztDQUUzQyxJQUFBLFVBQUEsQ0FBQSxRQUFRLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUE7O0NBRXpDLElBQUEsVUFBQSxDQUFBLFVBQVUsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQTs7Q0FFN0MsSUFBQSxVQUFBLENBQUEsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFBOztDQUVyRCxJQUFBLFVBQUEsQ0FBQSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUE7O0NBRW5ELElBQUEsVUFBQSxDQUFBLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQTs7Q0FFM0MsSUFBQSxVQUFBLENBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFBOztDQUV6QyxJQUFBLFVBQUEsQ0FBQSxZQUFZLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUE7O0NBRWpELElBQUEsVUFBQSxDQUFBLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQTs7Q0FFakQsSUFBQSxVQUFBLENBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFBOztDQUV6QyxJQUFBLFVBQUEsQ0FBQSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUE7O0NBRW5ELElBQUEsVUFBQSxDQUFBLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUE7O0NBRS9ELElBQUEsVUFBQSxDQUFBLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQTs7Q0FFL0MsSUFBQSxVQUFBLENBQUEsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQTs7Q0FFM0QsSUFBQSxVQUFBLENBQUEsVUFBVSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFBOztDQUU3QyxJQUFBLFVBQUEsQ0FBQSxXQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUE7O0NBRS9DLElBQUEsVUFBQSxDQUFBLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQTs7Q0FFL0MsSUFBQSxVQUFBLENBQUEsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFBOztDQUUzQyxJQUFBLFVBQUEsQ0FBQSxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUE7O0NBRXJDLElBQUEsVUFBQSxDQUFBLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUE7Q0FDN0UsQ0FBQyxFQXJEZ0JBLGtCQUFVLEtBQVZBLGtCQUFVLEdBcUQxQixFQUFBLENBQUEsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=
|